Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Сумма двумерного массива через рекурсию

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

Комментариев нет:

Отправить комментарий