Вам не хватает оператора return
для базового случая.Функция возвращает undefined
, когда вы возвращаете без значения, и когда вы умножаете это, вы получаете NaN
.
Кроме того, вы не зацикливаетесь, поэтому вы должны использовать if
вместо while
.
function factorial(n) {
if (n > 0) {
return factorial(n - 1) * n;
} else {
return 1;
}
}
console.log(factorial(10));
Вы также можете написать это с циклом вместо рекурсии.
function factorial(n) {
result = 1;
for (var i = 1; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorial(10));