求 的和。
本题要求计算从 1 的阶乘到 20 的阶乘的累加和。
其中,(读作“n 阶乘”)定义为:
题目中从 开始累加至,共 20 项。
2561327494111820313我们采用递推方式计算阶乘,避免重复计算:
初始化:fac = 1(表示)
第 1 次循环(i=1):fac = 1 * 1 = 1 →
第 2 次循环(i=2):fac = 1 * 2 = 2 →
第 3 次循环(i=3):fac = 2 * 3 = 6 →
...
第 n 次循环:fac = (n-1)! * n = n!
同时,每轮将当前 fac 累加到 sum 中。
这种方式时间复杂度为,空间复杂度为,非常高效。
public class Demo21 {
public static void main(String[] args) {
long sum = 0;
long fac = 1;
for (int i = 1; i <= 20; i++) {
fac *= i; // 计算 i!
sum += fac; // 累加到总和
}
System.out.println(sum);
}
}阶乘是组合数学、概率论、泰勒展开等领域的基础运算。
注意:不要在循环内部用递归或重复乘法计算阶乘(如每次从 1 乘到 i),那样会导致时间复杂度升至,效率低下。
本题体现了“利用前一步结果优化当前计算”的典型动态规划思想(尽管很简单)。
总结:本题虽简单,但涉及大数处理意识、算法效率、数据类型选择等重要编程素养,是初学者理解迭代与累积模式的经典例题。