en.javascript.info/1-js/2-first-steps/17-recursion/2-factorial/solution.md
2015-01-09 01:39:01 +03:00

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