Не много не понимаю как работает тернарный оператор "?" или вообще дело не в нем

Рейтинг: 0Ответов: 1Опубликовано: 24.07.2023

Немного изучаю js и столкнулся с проблемой.

Насколько я понял, тернарный оператор "?" это более короткая вариация if, то есть если у нас условие верно, то выполняется первое выражение, если нет, то второе.

Первый пример:

const number = function fac(n) 
{
    return n < 2 ? 1 : n * fac(n - 1) ;
}

console.log(number(3));

Как бы в этом примере все понятно, 3 больше двух и выполняется второе выражение: 3 * 3 - 1 = 6

Но во втором примере я не понимаю почему такой результат:

 const number = function fac(n) 
{
    return n < 2 ? 1 : n * fac(n - 1) ;
}

console.log(number(4)); //24

В моем понимании должно получаться 12, но почему 24 не понимаю.

Извините за возможный глупый вопрос, но правда не понятно

Ответы

▲ 0Принят

Скорее всего ваша проблема не в понимании тернарного оператора, а рекурсии. Попробую объяснить. При вызове number(4) происходит 4 рекурсивных вызова функции fac с аргументами от 4 до 1

fac(4)
fac(3)
fac(2)
fac(1) // вот тут тернарный оператор и выдаст true ибо 1 < 2

Рассмотрим эту цепочку вызовов в обратной последовательности, мы уже знаем что fac(1) = 1 ибо выполняется первая часть тернарного оператора. теперь рассмотрим fac(2) исходя из условия функции

fac(2) = 2 * fac(2-1) // ибо 2 не меньше 2

но мы уже знаем что

fac(2-1) = fac(1) = 1

соответственно

fac(2) = 2 * 1 = 2

общая картина уже будет такой:

fac(4)
fac(3)
fac(2) // 2
fac(1) // 1

Идем далее

fac(3) = 3 * fac(3-1) // fac(3-1) = fac(2) = 2
fac(3) = 3 * 2 = 6

общий стек вызовов уже будет следующим

fac(4)
fac(3) // 6
fac(2) // 2
fac(1) // 1

ну и последний вызов

fac(4) = 4 * fac(4-1) // fac(4-1) = fac(3) = 6
fac(4) = 4 * 6 = 24

Финальный стек вызовов уже будет таким

fac(4) // 24
fac(3) // 6
fac(2) // 2
fac(1) // 1