Почему он возвращает Nan, когда я выполняю рекурсию

#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 .