@Azazel7

Как в этом случае происходят рекурсивные возвраты?

Не могу понять как это схематично получается ,можете на примере обьяснить поэтапно .
Почему меняется порядок возврата?
function pow(x) {
    if (x != 1) 
        return '@' + pow(x - 1)
    else return '#'
}
alert(pow(3)) // @@#


function pow(x) {
    if (x != 1)
        return pow(x - 1) + '@'
    else return '#'
}
alert(pow(3) //#@@
  • Вопрос задан
  • 2666 просмотров
Пригласить эксперта
Ответы на вопрос 2
begemot_sun
@begemot_sun
Программист в душе.
pow(x-1) -- рекурсивный вызов функции.
Что это такое?
Это значит что вычисление функции pow(x) приостанавливается до тех пор, пока pow(x-1) не вернет результат, которая в свою очередь зависит от pow(x-2) и т.д.

Одним словом
pow(3) разворачивается в
return '@' + ('@' + pow((3-1)-1));
=>
return '@' + ('@' + pow(1));
=>
return '@' + ('@' + '#');

аналогично для другого случая.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Попробуйте мысленно проследить вызов функции.

Представьте что перед вами лежит стопка бумажек, вам нужно найти какую-то (ваше условие, прекращающее рекурсию). Вы берете один лист, кладете его рядом (другая стопка, в вашем коде это конкатенация строки), потом берете следующий и т.д. В итоге у нас меняется порядок стопки, она переворачивается.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы