用js实现阶乘
递归实现
递归是一种常见的实现阶乘的方法,通过函数调用自身来实现。
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorial(n - 1);
}
递归方法的优点是代码简洁,易于理解。缺点是当n较大时可能导致栈溢出。
循环实现
使用循环可以避免递归可能导致的栈溢出问题。
function factorial(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
循环实现更高效,适合处理较大的n值,且不会出现栈溢出问题。

尾递归优化
在支持尾调用优化的JavaScript引擎中,可以使用尾递归来提高性能。
function factorial(n, acc = 1) {
if (n === 0 || n === 1) {
return acc;
}
return factorial(n - 1, n * acc);
}
尾递归将中间结果存储在参数中,避免了递归调用的堆栈累积。

使用reduce方法
利用数组的reduce方法可以更函数式地实现阶乘。
function factorial(n) {
return Array.from({length: n}, (_, i) => i + 1)
.reduce((acc, val) => acc * val, 1);
}
这种方法首先生成一个从1到n的数组,然后使用reduce方法计算乘积。
大数处理
对于非常大的n值,可以使用BigInt来处理大整数。
function factorial(n) {
let result = 1n;
for (let i = 2n; i <= BigInt(n); i++) {
result *= i;
}
return result;
}
使用BigInt可以处理超过JavaScript普通数字范围的大整数阶乘计算。






