js实现阶乘之和
阶乘之和的概念
阶乘之和指的是将一系列数字的阶乘相加的结果。例如,计算1! + 2! + 3! + ... + n!的值。阶乘的定义是:n! = n × (n-1) × (n-2) × ... × 1。
实现阶乘的函数
在JavaScript中,可以通过递归或循环的方式实现阶乘计算。以下是两种常见的实现方式:
递归实现阶乘
function factorialRecursive(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
循环实现阶乘
function factorialLoop(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
计算阶乘之和
基于阶乘函数,可以进一步计算阶乘之和。以下是两种实现方式:
使用循环计算阶乘之和
function factorialSum(n) {
let sum = 0;
for (let i = 1; i <= n; i++) {
sum += factorialLoop(i); // 或 factorialRecursive(i)
}
return sum;
}
优化版本(避免重复计算)
function factorialSumOptimized(n) {
let sum = 0;
let currentFactorial = 1;
for (let i = 1; i <= n; i++) {
currentFactorial *= i;
sum += currentFactorial;
}
return sum;
}
示例调用
假设需要计算1! + 2! + 3! + 4! + 5!的值,可以调用上述函数:
console.log(factorialSum(5)); // 输出: 153
console.log(factorialSumOptimized(5)); // 输出: 153
注意事项
- 对于较大的n值,阶乘结果可能超出JavaScript的数字表示范围(Number.MAX_SAFE_INTEGER),此时需要考虑使用大整数库(如BigInt)。
- 递归实现可能导致栈溢出,对于较大的n值,建议使用循环实现。
使用BigInt处理大数
如果需要计算较大n的阶乘之和,可以使用BigInt:

function factorialBigInt(n) {
let result = 1n;
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
function factorialSumBigInt(n) {
let sum = 0n;
let currentFactorial = 1n;
for (let i = 1n; i <= n; i++) {
currentFactorial *= i;
sum += currentFactorial;
}
return sum;
}
console.log(factorialSumBigInt(20n).toString()); // 输出大数结果






