#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); на всякий случай вдруг кому пригодится
Комментариев нет:
Отправить комментарий