js实现阶层
阶乘的实现方法
阶乘是指从1到该数的所有正整数相乘的结果,记作n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。以下是几种在JavaScript中实现阶乘的方法。
递归方法
递归是一种常见的阶乘实现方式,通过函数调用自身来解决问题。需要注意基线条件(递归终止条件)。
function factorialRecursive(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
console.log(factorialRecursive(5)); // 输出: 120
迭代方法
使用循环(如for或while)逐步计算阶乘,适合处理较大的数,避免递归的栈溢出问题。
function factorialIterative(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorialIterative(5)); // 输出: 120
尾递归优化
某些JavaScript引擎支持尾调用优化(TCO),可以避免递归导致的栈溢出问题。尾递归将计算结果作为参数传递。
function factorialTailRecursive(n, accumulator = 1) {
if (n === 0 || n === 1) {
return accumulator;
}
return factorialTailRecursive(n - 1, n * accumulator);
}
console.log(factorialTailRecursive(5)); // 输出: 120
使用BigInt处理大数
JavaScript的Number类型有精度限制(最大安全整数为2^53 - 1)。对于更大的阶乘,可以使用BigInt类型。
function factorialBigInt(n) {
let result = 1n;
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorialBigInt(20n)); // 输出: 2432902008176640000n
注意事项
- 递归方法简洁但可能因栈溢出而失败(如
n过大)。 - 迭代方法性能更好,适合大多数场景。
BigInt适用于超过Number范围的整数计算,但需注意语法(如20n)。







