js实现n的阶乘
递归实现
递归是最直观的阶乘实现方式,通过函数调用自身来解决问题。当 n 为 1 或 0 时,直接返回 1,否则返回 n * factorial(n - 1)。

function factorial(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorial(n - 1);
}
循环实现
使用循环可以避免递归可能导致的栈溢出问题,适合计算较大的阶乘。通过迭代从 1 到 n,逐步累乘结果。

function factorial(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
尾递归优化
尾递归是递归的一种优化形式,某些 JavaScript 引擎(如 Safari)会对其进行优化,避免栈溢出。需要将中间结果作为参数传递。
function factorial(n, acc = 1) {
if (n === 0 || n === 1) {
return acc;
}
return factorial(n - 1, n * acc);
}
大数阶乘(BigInt)
对于较大的 n(如 n > 20),普通数字类型会溢出,可以使用 BigInt 类型处理大整数阶乘。
function factorial(n) {
let result = 1n; // BigInt literal
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
性能比较
- 递归:代码简洁,但可能栈溢出(如
n > 10000)。 - 循环:性能较好,适合大多数场景。
- 尾递归:部分引擎优化,但兼容性有限。
- BigInt:适合大数计算,但需注意类型转换。






