@name1e55

Рекурсия факториала на простом примере?

<script>
alert(fact(5));

function fact(num){
    return (num < 2) ? true :
    num * fact(num - 1);
    } </script>


Почему, на протяжении трех итераций, переменной num присваиваются значения 20,60,120?
То есть, почему, скрипт понимает num * fact(num - 1) как num *= fact(num - 1).
Интересует именно логика такого поведения.
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
AnnTHony
@AnnTHony
Интроверт
fact(5)
num = 5
5 * fact(5 - 1)
     num = 5 - 1 = 4
     4 * fact(4 - 1)
          num = 4 - 1 = 3
          3 * fact(3 - 1)
               num = 3 - 1 = 2
               2 * fact(2 - 1)
                    num = 2 - 1 = 1 (< 2)
                    return true
5 * 4 * 3 * 2 * true = 120, т.к. true в данном случае приравнивается к 1


И num не ведет себя как num *= fact(num - 1)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Azperin
Дилетант
Просто идет по рекурсии. Думаю про стеки стоит погуглить.
5 * 4 * 3 * 2 * 1 = 20 * 3 * 2 * 1 = 60 * 2 * 1 = 120 * 1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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