实现阶乘JS
递归实现阶乘
递归是一种直接按照数学定义实现阶乘的方法。n的阶乘可以表示为n乘以(n-1)的阶乘,基础情况是0的阶乘为1。
function factorialRecursive(n) {
if (n === 0) return 1;
return n * factorialRecursive(n - 1);
}
循环实现阶乘
使用循环可以避免递归可能导致的栈溢出问题,特别适合计算大数的阶乘。
function factorialIterative(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
尾递归优化实现
尾递归优化可以防止递归调用导致的栈溢出,但需要注意JavaScript引擎是否支持尾调用优化。
function factorialTailRecursive(n, accumulator = 1) {
if (n === 0) return accumulator;
return factorialTailRecursive(n - 1, n * accumulator);
}
使用数组reduce方法
利用数组的reduce方法可以简洁地实现阶乘计算,但需要先创建数组。
function factorialReduce(n) {
return Array.from({length: n}, (_, i) => i + 1)
.reduce((acc, val) => acc * val, 1);
}
大数阶乘处理
当需要计算大数阶乘时,可以考虑使用BigInt类型来避免精度丢失。
function factorialBigInt(n) {
let result = 1n;
for (let i = 2n; i <= BigInt(n); i++) {
result *= i;
}
return result;
}
性能考虑
循环实现通常性能最好,递归实现代码最简洁但可能有栈溢出风险。对于非常大的数字,BigInt是必要的选择。实际应用中应根据具体需求选择合适的方法。







