В
учебнике я прочитал про рекурсию. Теоретически всё понятно и логично, но на практике не всё однозначно.
Вот пример из учебника с дополнительным выводом переменный
n, который я сам добавил:
function pow(x, n) {
if (n != 1) { // пока n != 1, сводить вычисление pow(x,n) к pow(x,n-1)
console.log("n = ", n);
return x * pow(x, n - 1);
} else {
return x;
}
}
alert( pow(2, 3) ); // 8
На первый взгляд, здесь нет цикла, что бы всё было очевидным, а лишь условие. Я читаю это так:
1. Мы вызвали функцию pow() и передали аргумент 3 на место параметра n.
2. В функции pow() отрабатывает условие:
if (n != 1)
т.к. (3 != 1), и выполняется выражение:
return x * pow(x, n - 1);
По логике, здесь оператор
return, который всегда прерывает работу функции. Но на самом деле, всё не так.
В консоли я вижу, что распечаталась переменная
n 2 раза. Т.е. условие:
if (n != 1)
отработало не 1 раз. Как так? Почему
return не сработал с первого раза?
Я понимаю, если бы выражение было не с if, а while, for т.е. какими-то циклами. Но здесь
if.
Как это вообще понять?