2017-02-21 7 views
1

Почему эта функция возвращает неопределенные? Я видел более чистые и эффективные способы сделать это, и я понимаю, что обычно это неправильная практика, чтобы модифицировать такой массив. Тем не менее, я не понимаю, почему этот пример не возвращает 15. Я консольно зарегистрирован как сумасшедший. Заранее благодарю за вашу дзен-новизну.Простой рекурсивный базовый футляр

Шаги, как я их вижу:

  • Pass в массиве и не дают второй аргумент, который по умолчанию 0
  • значение массива извлекается и это добавляется к общему количеству
  • Рекурсивный вызов проходя недавно укороченный массив, а также текущее общее количество.
  • Когда длина массива равна нулю, условие выхода выполняется и возвращается сумма.

var sumOfArray = function(array, total = 0) { 
 
    var temp = 0; 
 

 
    // base case 
 
    if (array.length == 0) { 
 
    return total; 
 
    } 
 

 
    temp += array.pop(); 
 
    total += temp; 
 

 
    sumOfArray(array, total); 
 
}; 
 

 

 
console.log('sumOfArray([1, 2, 3, 4, 5]=' + sumOfArray([1, 2, 3, 4, 5]));

+0

Вы должны * вернуть * возвращаемое значение из рекурсивного вызова, иначе вы ничего не вернете (= undefined). – trincot

+0

да, конечно, спасибо! – adamb

ответ

1

Эй, человек в основном все на этот код был правильным. У вас было только отсутствие инструкции return в блоке else и некоторых других незначительных вещах; мы все были там.

var sumOfArray = function(array, total=0) { 
    var temp = 0; 
    if (array.length === 0) { 
    return total; 
    } else { 
    temp += array.pop(); 
    total += temp; 
    return sumOfArray(array, total); 
    } 
} 

sumOfArray([1,2,3,4,5]) 
+0

Забавно, как очевидно, что сейчас выглядит ... спасибо! – adamb