expt = (b, n) => {
if (n === 0)
return 1;
return b * expt(b, n-1);
}
expt(5, 4)
Первый аргумент число, а второй степень. Хочу понять как работает функция внутри. Мне не понятно как происходит умножение здесь return b * expt(b, n-1); После каждой итерации в окружении или в стеке (не знаю как правильно) сохраняется 2 числа, так почему b умножается именно на b, ведь в функции передается 2 числа. b умножается на результат функции expt(b, n-1), после первой итерации результат будет b * (5, 4) потом b * (5, 3) и так до конца.
Если взять функию факториала, то там все понятно, передается только одно число, и умножается все на него же самого.
const factorial = (n) => {
if (n === 1)
return 1;
return n * factorial(n - 1);
}
factorial(5)
По какому принципу происходит умножение в первом случае? Куда девается n? Визуализация работы функции в Pythontutor https://goo.gl/zjqBnG
Пройди expt(2, 2) дебаггером и поймёшь
Нет никакого "после" в итерациях, вызов же рекурсивный
Обсуждают сегодня