Факториал числа - это число, умноженное на «себя минус один», затем на «себя минус два» и так далее, до единицы. Обозначается n! = n*(n-1)*(n-2)*...*1. Например:
1! = 1 2! = 2*1 = 2 3! = 3*2*1 = 6 4! = 4*3*2*1 = 24 5! = 5*4*3*2*1 = 120
Обратим внимание, что n! можно записать как n * (n-1)!, например 3! = 3*(2*1) = 3*2!
Задача — написать функцию factorial(n), которая возвращает факториал числа n!, используя рекурсивный вызов.
По свойствам факториала, как описано в условии, n! можно записать как n * (n-1)!.
То есть, результат функции для n можно получить как n, умноженное на результат функции для n-1, и так далее до 1!:
function factorial(n) {
return (n!=1) ? n*factorial(n-1) : 1;
}
alert( factorial(5) ); // 120
Базисом рекурсии является значение 1. А можно было бы сделать базисом и 0. Тогда код станет чуть короче:
function factorial(n) {
return n ? n*factorial(n-1) : 1;
}
alert( factorial(5) ); // 120
В этом случае вызов factorial(1) сведется к 1*factorial(0), будет дополнительный шаг рекурсии.