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