实现阶乘JS
递归实现
递归方法通过函数调用自身来实现阶乘计算,代码简洁但需要注意栈溢出风险(大数计算时)。

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;
}
尾递归优化
ES6支持的尾调用优化版本,兼具递归的可读性和迭代的性能优势。
function factorialTailRecursive(n, accumulator = 1) {
if (n === 0) return accumulator;
return factorialTailRecursive(n - 1, n * accumulator);
}
大数处理
当需要计算超大数阶乘时,建议使用BigInt类型以避免数值精度丢失。
function factorialBigInt(n) {
let result = 1n;
for (let i = 2n; i <= BigInt(n); i++) {
result *= i;
}
return result.toString();
}
性能对比
- 递归:时间复杂度O(n),空间复杂度O(n)(调用栈)
- 迭代:时间复杂度O(n),空间复杂度O(1)
- 尾递归:在支持TCO的引擎中空间复杂度可优化为O(1)
- BigInt版本适用于n>21的情况(普通number类型上限)






