Здравствуйте, сегодня столкнулся с такой вот задачей:
Дан двумерный массив с числами. Найдите сумму элементов этого массива используя рекурсию и не используя цикл.
Смог решить только данным способом игнорируя условия задачи (не закомиченное решение простой перебор с сложением, если через рекурсию то первая функция превращает двумерный массив в одномерный и из него уже считается сумма через рекурсию):
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);*/
Есть способ решить данную задачу не нарушая условий полностью через рекурсию без использования циклов?
Ответ
Сделал без использования циклов вообще.
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));
Комментариев нет:
Отправить комментарий