По свойствам факториала, как описано в условии, `n!` можно записать как `n * (n-1)!`. То есть, результат функции для `n` можно получить как `n`, умноженное на результат функции для `n-1`, и так далее до `1!`: ```js run function factorial(n) { return (n != 1) ? n * factorial(n - 1) : 1; } alert( factorial(5) ); // 120 ``` Базисом рекурсии является значение `1`. А можно было бы сделать базисом и `0`. Тогда код станет чуть короче: ```js run function factorial(n) { return n ? n * factorial(n - 1) : 1; } alert( factorial(5) ); // 120 ``` В этом случае вызов `factorial(1)` сведётся к `1*factorial(0)`, будет дополнительный шаг рекурсии.