实现阶乘JS
阶乘的概念
阶乘(Factorial)指从1到给定正整数n的所有整数的乘积,记作n!。例如5! = 5 × 4 × 3 × 2 × 1 = 120。0!定义为1。
递归实现
递归方法通过函数调用自身逐步分解问题,直到达到基线条件(如n ≤ 1)。

function factorialRecursive(n) {
if (n <= 1) return 1;
return n * factorialRecursive(n - 1);
}
// 示例:factorialRecursive(5) 返回 120
循环实现
通过循环结构(如for或while)逐次累乘,避免递归的调用栈开销。

function factorialIterative(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
// 示例:factorialIterative(5) 返回 120
尾递归优化
某些JavaScript引擎支持尾调用优化(TCO),可减少递归的栈溢出风险。
function factorialTailRecursive(n, accumulator = 1) {
if (n <= 1) return accumulator;
return factorialTailRecursive(n - 1, n * accumulator);
}
// 示例:factorialTailRecursive(5) 返回 120
大数处理(BigInt)
当n较大时(如n > 20),普通数值类型会溢出,需使用BigInt。
function factorialBigInt(n) {
let result = 1n; // BigInt字面量
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
// 示例:factorialBigInt(20n) 返回 2432902008176640000n
性能与注意事项
- 递归简洁但可能栈溢出(如n > 10000未优化时)。
- 循环适用于大多数场景,性能稳定。
- BigInt适用于大数计算,但需注意浏览器兼容性(IE不支持)。
根据需求选择合适方法,常规场景推荐循环实现。





