Показать сообщение отдельно
  #1 (permalink)  
Старый 09.12.2018, 01:04
hoz hoz вне форума
Интересующийся
Отправить личное сообщение для hoz Посмотреть профиль Найти все сообщения от hoz
 
Регистрация: 26.11.2018
Сообщений: 19

Рекурсия. Почему не прерывается функция оператором return ?
В учебнике я прочитал про рекурсию. Теоретически всё понятно и логично, но на практике не всё однозначно.
Вот пример из учебника с дополнительным выводом переменный 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.
Как это вообще понять?

Последний раз редактировалось hoz, 09.12.2018 в 01:16.
Ответить с цитированием