Как работает возврат в JavaScript - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть одна простая рекурсивная функция, которая добавляет все свои предыдущие числа.

function add(n) {
  if (n == 0) {
    return 1; // when it reaches here it should give me 1.
  }
  return n + add(n - 1);
}

console.log( add(5) ); // give me 16

когда выполнение достигает строки № 3, оно должно вернуть мне 1, но это возвращает мне 16. Как на самом деле работает возврат?

Ответы [ 2 ]

3 голосов
/ 22 сентября 2019

потому что условный оператор, в котором находится ваша строка 3, говорит, что должен возвращать 1, только если переданный аргумент n равен 0. Функция, которую вы вызываете в конце кода, передает аргумент5.

первый оператор return будет работать только в том случае, если условие в операторе if истинно, в противном случае он переходит ко второму возврату, который снова вызывает функцию внутри себя.

3 голосов
/ 22 сентября 2019

Рекурсия приостанавливает программу при вызове шага рекурсии и продолжает решать подзадачу, и когда выполняется базовое условие, все операторы возврата передают управление обратно оператору вызываемого.

Итак

add(5)-->return 5+add(4)
                     |-->return 4+add(3)
                                   |-->return 3+add(2)
                                                 |-->return 2+add(1)
                                                                 |-->return 1+add(0)//base condition, return 1 for add(0) which in return return 2

1-->2-->4-->7-->11-->16 (In reverse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...