По свойствам факториала, как описано в условии, `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)`, будет дополнительный шаг рекурсии.