js实现阶乘
实现阶乘的 JavaScript 方法
递归方法
递归是一种常见的实现阶乘的方式,通过函数调用自身来解决问题。递归方法简洁但需要注意栈溢出的问题,尤其是在计算较大的数时。

function factorialRecursive(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
迭代方法
迭代方法通过循环来计算阶乘,避免了递归可能导致的栈溢出问题,适合处理较大的数。

function factorialIterative(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
使用 reduce 方法
利用数组的 reduce 方法可以更简洁地实现阶乘计算,适合函数式编程风格。
function factorialReduce(n) {
return Array.from({ length: n }, (_, i) => i + 1)
.reduce((acc, val) => acc * val, 1);
}
尾递归优化
尾递归优化可以避免递归调用的栈溢出问题,但需要注意 JavaScript 引擎是否支持尾调用优化。
function factorialTailRecursive(n, acc = 1) {
if (n === 0 || n === 1) {
return acc;
}
return factorialTailRecursive(n - 1, acc * n);
}
注意事项
- 递归方法在计算较大的数时可能导致栈溢出。
- 迭代方法更适合处理大数计算。
- 阶乘函数通常只对非负整数有效,输入负数或非整数时应进行错误处理。
function factorial(n) {
if (n < 0 || !Number.isInteger(n)) {
throw new Error('Input must be a non-negative integer');
}
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
以上方法可以根据具体需求选择使用,递归和迭代是最常见的实现方式。






