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;
}
尾递归优化
某些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;
}
性能考虑
对于需要频繁计算的场景,可以使用缓存机制优化性能。

const factorialCache = [1, 1];
function factorialWithCache(n) {
if (factorialCache[n]) {
return factorialCache[n];
}
factorialCache[n] = n * factorialWithCache(n - 1);
return factorialCache[n];
}






