Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2018, 01:13
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

return отрабатывает, и прекращает выполнение текущей функции, но до того как он это сделает, запускает pow(x, n - 1) и результат ее выполнения умножает на x и только потом возвращает результат и прекращает выполнение. тоесть сначала выполняется самая глубокая, потом уровнем выше итд.
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2018, 01:21
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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

Дочитав до конца, в принципе, я начал понимать как всё это работает. Надо же было кому-то такое придумать..
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему функция выполняется один раз? Elect Общие вопросы Javascript 3 15.11.2015 21:19
почему не работает функция? sana Общие вопросы Javascript 5 01.04.2015 17:53
Почему не определяется функция? Batyabest AJAX и COMET 4 13.10.2014 15:42
Свойства посредством полиморфных функций tenshi Ваши сайты и скрипты 0 18.03.2010 17:12
Функция не возвращает false, почему? Vitaly jQuery 3 05.07.2009 16:05