#javascript #массивы #рекурсия
Здравствуйте, сегодня столкнулся с такой вот задачей:
Дан двумерный массив с числами. Найдите сумму элементов этого массива используя рекурсию
и не используя цикл.
Смог решить только данным способом игнорируя условия задачи (не закомиченное решение
простой перебор с сложением, если через рекурсию то первая функция превращает двумерный
массив в одномерный и из него уже считается сумма через рекурсию):
var arr = [1, 2, [3, 4]],
result = 0, //при рекурсии меняется на array
sumArr = 0;
function newArr(arr) {
for (var i = arr.length; i--;) {
if (typeof(arr[i]) == 'number') {
//result.push(arr[i]);
result += +arr[i];
}
for (var j = arr.length; j--;) {
if (typeof(arr[i][j]) == 'number') {
//result.push(arr[i][j]);
result += +arr[i][j];
}
}
}
}
newArr(arr);
console.log(result);
/*function sum (result){
if(result.length > 0){
sumArr += result[0];
result.shift();
sum(result);
}
}
sum(result);
console.log(sumArr);*/
Есть способ решить данную задачу не нарушая условий полностью через рекурсию без
использования циклов?
Ответы
Ответ 1
Сделал без использования циклов вообще. var test = [1, 1, 1, [1, 1, [1, [1, [ [1], [1] ]], 1], 1], 1]; function arrSum(array, i = 0) { if (isFinite(array)) return Number(array); else if (typeof array == "object" && i < array.length) // верно только если array - массив (имеет свойство length) return arrSum(array[i]) + arrSum(array, i + 1); return 0; } console.log(arrSum(test));Ответ 2
2 минуты гуглинга не зная js function arrSum(arr) { var sum = 0; // iterate array using forEach, better to use for loop since it have higher performance arr.forEach(function(v) { // checking array element is an array if (typeof v == 'object') // if array then getting sum it's element (recursion) sum += arrSum(v); else // else adding the value with sum sum += v }) // returning the result return sum; } ИсточникОтвет 3
var arr = [[3,2], [6, 5], [5, 4]]; var sum = 0; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr[i].length; j++) { sum += arr[i][j]; } } console.log(sum); на всякий случай вдруг кому пригодится
Комментариев нет:
Отправить комментарий