@incentive

Как работает данная рекурсия?

function paw(res, num) {
  if (num === 1) {
    return res;
  } else {
    return res * paw(res, num - 1);
  }
}
var result = paw(2, 5);
console.log(result);

Вот значит, num не равен 1, переходим дальше.
res = 2
num = 5.
Теперь идет поочередный запуск функции в которой из num вычитается 1. Когда num становится 1, срабатывает наш if который возвращает уже готовый результат.
Но как происходит перемножение? Растолкуйте пожалуйста
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
@UnformedVoid
Разработчик ПО
paw(2, 5) = 2 * paw(2, 4)
2 * paw(2, 4)                   --> paw(2, 4) = 2 * paw(2, 3)
2 * (2 * paw(2, 3))             --> paw(2, 3) = 2 * paw(2, 2)
2 * (2 * (2 * paw(2, 2)))       --> paw(2, 2) = 2 * paw(2, 1)
2 * (2 * (2 * (2 * paw(2, 1)))) --> paw(2 ,1) = 2
2 * (2 * (2 * (2 * 2)))


На 3 строчке не готовый результат, а просто значение res и оно просто подставляется вместо рекурсивного вызова функции на пятой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@McBernar
У вас функция вызывает саму себя.
Промежуточный результат записывается в res и передается в этот новый вызов.

Все вычисления начинаются только тогда, когда рекурсия достигнет конца и вернет res.

Вот картинка под ваш пример. Обратите внимание на зеленые прямоугольники.

recursiya.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы