使用 Java 计算 1 到 20 的阶乘之和
在编程中,计算阶乘是一个常见的问题。阶乘(Factorial)通常表示为 n!,定义为所有小于及等于该数的正整数的乘积。
1. 阶乘的基本概念
阶乘在数学中有着广泛的应用,尤其是在组合数学、概率论等领域。计算阶乘的一个简单方法是使用循环或递归。然而,对于较大的数,递归可能会导致栈溢出,因此推荐使用循环来实现。
2. Java 代码实现
2.1 基础实现
首先,我们需要一个函数来计算单个数的阶乘,并累加求和。
public class FactorialSum {
public static void main(String[] args) {
long sum = 0;
for (int i = 1; i <= 20; i++) {
sum += factorial(i);
}
System.out.println("1 + 2! + ... + 20! 的和为:" + sum);
}
public static long factorial(int n) {
if (n == 0 || n == 1) return 1;
long result = 1;
for (int i = 2; i <= n; i++) result *= i;
return result;
}
}
2.2 性能优化
为了提高性能,可以使用动态规划的思想,避免重复计算阶乘。在循环中直接维护当前阶乘值。
public class FactorialSumOptimized {
public static void main(String[] args) {
long sum = 0;
long factorial = 1;
for (int i = 1; i <= 20; i++) {
factorial *= i;
sum += factorial;
}
System.out.println("1 + 2! + ... + 20! 的和为:" + sum);
}
}
运行结果均为:2561327494111820313
3. 代码说明与注意事项
- 数据类型选择:由于 20! 数值很大,使用
long类型存储。若需处理更大范围,建议使用BigInteger类。 - 逻辑说明:主方法遍历 1 到 20,调用阶乘方法累加。优化版在单次循环中完成阶乘累积和总和累积。
- 输入验证:本程序假设输入范围固定,未包含额外输入验证。
