en.javascript.info/1-js/2-first-steps/20-recursion/2-factorial/solution.md
Ilya Kantor 6baabac3c5 up
2015-09-21 15:04:14 +02:00

932 B
Raw Blame History

По свойствам факториала, как описано в условии, n! можно записать как n * (n-1)!.

То есть, результат функции для n можно получить как n, умноженное на результат функции для n-1, и так далее до 1!:

//+ run
function factorial(n) {
  return (n != 1) ? n * factorial(n - 1) : 1;
}

alert( factorial(5) ); // 120

Базисом рекурсии является значение 1. А можно было бы сделать базисом и 0. Тогда код станет чуть короче:

//+ run
function factorial(n) {
  return n ? n * factorial(n - 1) : 1;
}

alert( factorial(5) ); // 120

В этом случае вызов factorial(1) сведётся к 1*factorial(0), будет дополнительный шаг рекурсии.