js实现阶乘之和
实现阶乘之和的方法
阶乘之和是指从1到n的阶乘相加的结果。例如,n=3时,阶乘之和为1! + 2! + 3! = 1 + 2 + 6 = 9。以下是几种实现阶乘之和的JavaScript方法。
方法一:使用循环计算阶乘之和
通过循环计算每个数的阶乘,并将结果累加。
function factorialSum(n) {
let sum = 0;
let factorial = 1;
for (let i = 1; i <= n; i++) {
factorial *= i; // 计算当前数的阶乘
sum += factorial; // 累加到总和中
}
return sum;
}
console.log(factorialSum(3)); // 输出: 9
说明:
- 初始化
sum为0,用于存储阶乘之和。 - 初始化
factorial为1,用于计算当前数的阶乘。 - 通过循环从1到n,每次更新
factorial的值并累加到sum中。
方法二:递归计算阶乘之和
使用递归函数计算阶乘,再通过循环累加阶乘结果。
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorial(n - 1);
}
function factorialSum(n) {
let sum = 0;
for (let i = 1; i <= n; i++) {
sum += factorial(i);
}
return sum;
}
console.log(factorialSum(3)); // 输出: 9
说明:
factorial函数通过递归计算阶乘。factorialSum函数通过循环调用factorial并累加结果。
方法三:使用数组的reduce方法
利用数组的reduce方法简化阶乘之和的计算。
function factorialSum(n) {
return Array.from({ length: n }, (_, i) => i + 1)
.reduce((sum, num) => {
const factorial = Array.from({ length: num }, (_, i) => i + 1)
.reduce((acc, val) => acc * val, 1);
return sum + factorial;
}, 0);
}
console.log(factorialSum(3)); // 输出: 9
说明:
- 使用
Array.from生成从1到n的数组。 - 通过
reduce方法计算每个数的阶乘并累加。
方法四:优化阶乘计算
在循环中复用前一个阶乘结果,减少重复计算。
function factorialSum(n) {
let sum = 0;
let factorial = 1;
for (let i = 1; i <= n; i++) {
factorial *= i;
sum += factorial;
}
return sum;
}
console.log(factorialSum(3)); // 输出: 9
说明:
- 与方法一类似,但更直观地展示了阶乘的复用逻辑。
方法五:使用ES6箭头函数和递归
结合箭头函数和递归实现简洁的阶乘之和计算。
const factorial = n => n <= 1 ? 1 : n * factorial(n - 1);
const factorialSum = n => n === 1 ? 1 : factorial(n) + factorialSum(n - 1);
console.log(factorialSum(3)); // 输出: 9
说明:
factorial函数通过箭头函数和递归计算阶乘。factorialSum函数通过递归累加阶乘结果。
注意事项
- 当n较大时(如n>20),阶乘结果会超出JavaScript的数字表示范围,导致精度丢失。可以使用BigInt处理大数。
- 递归方法在n较大时可能导致栈溢出,建议使用循环方法。







