#javascript #recursion
Вопрос:
Язык JavaScript
я хочу, чтобы произошла рекурсия. Мне нужна сумма первых 3 элементов в этом массиве. Но по какой-то причине я получаю Nan в качестве вывода. arr[n-1] возвращает 4, но сумма(arr,n-1) по какой-то причине ведет себя неожиданно, почему? я вижу это как сумму([2,3,4,5],3-1);
function sum(arr, n){
if(n>=0){
var total = arr[n-1] sum(arr,n-1);
return total;
}
}
sum([2, 3, 4, 5], 3);
Ответ №1:
Проблема в том, что он возвращается undefined
при последнем возврате и пытается использовать индекс -1, когда n == 0
. Это должно исправить ситуацию: (1. изменено >= на >> 2. добавлено другое значение, если оно равно false)
function sum(arr, n){
console.log(arr, n)
if(n>0){
var total = arr[n-1] sum(arr,n-1);
return total;
}
else {
return 0;
}
}
sum([2, 3, 4, 5], 3);
Комментарии:
1. остальное не нужно, вы можете сразу вернуть 0
2. верно из-за оператора возврата в if, но я не вижу обратной стороны в том, чтобы включить остальное.
Ответ №2:
В случае n
0 ваше условие по-прежнему выполняется, и вы получите доступ к индексу arr[-1]
, который не определен.
Математические операции над undefined
продуктом NaN
.