Рекурсивная сумма двумерного массива - PullRequest
1 голос
/ 05 марта 2019

function twoDSum(arr){
      debugger
      result = 0
      for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
         result += twoDSum(arr[i])
        } else {
          result += arr[i]
        }
      }
      return result
    }
    
    array_1 = [
      [4, 5],
      [1, 3, 7, 1]
    ]
    console.log(twoDSum(array_1))

Код выше работает отлично.Однако мой вопрос заключается в том, почему приведенный ниже код даст неправильный ответ.Я предполагаю, что я вычисляю сумму подмассива и сохраняю ее в переменную и вместо этого добавляю к своему результату, она удваивается в каждом массиве

function twoDSum(arr){
      debugger
      result = 0
      for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
         let subSum = twoDSum(arr[i])
         result += subSum
        } else {
          result += arr[i]
        }
      }
      return result
    }
    
    array_1 = [
      [4, 5],
      [1, 3, 7, 1]
    ]
    console.log(twoDSum(array_1))

1 Ответ

0 голосов
/ 05 марта 2019

Используйте локальную переменную result вместо глобальной:

function twoDSum(arr){
      debugger
      let result = 0
      for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
         let subSum = twoDSum(arr[i])
         result += subSum
        } else {
          result += arr[i]
        }
      }
      return result
    }
    
    array_1 = [
      [4, 5],
      [1, 3, 7, 1]
    ]
    console.log(twoDSum(array_1))
...