Java 计算 1 到 100 求和:循环 vs 数学公式
Java 计算 1 到 100 求和:循环 vs 数学公式
同样的结果,两种思路,差距有多大?
引言
计算 1+2+3+…+100 看似入门,但藏着编程思维的两种典型范式:
- 循环累加:一步步算,通用但慢
- 数学公式:一步到位,特定场景更快
这两种写法,面试经常被问到——考察的不是代码本身,是你对”问题建模”的理解深度。
1. 循环累加:通用解法
1 | |
运行结果:1+2+3+...+100 = 5050
优点:通用——任何等差数列都能算,逻辑清晰。
缺点:100 次循环,慢但能跑。如果是 1 到 10 亿,性能瓶颈立刻暴露。
2. 数学公式:O(1) 解法
高斯小时候发现:1+2+…+100 = 100 × (100+1) / 2 = 5050。
这是等差数列求和公式:sum = n × (n+1) / 2。
1 | |
运行结果:1+2+3+...+100 = 5050
优点:O(1) 时间复杂度,一次计算完成。
缺点:只适用于等差数列——如果求 1²+2²+…+100²,公式不一样。
3. 两种写法对比
| 维度 | 循环累加 | 数学公式 |
|---|---|---|
| 时间复杂度 | O(n) | O(1) |
| 通用性 | ✅ 任何累加 | ❌ 仅等差数列 |
| 代码量 | 4-5 行 | 1 行 |
| 可读性 | 直观 | 需数学基础 |
| 大数据性能 | 慢 | 极快 |
| 溢出风险 | 取决于 n | 中间计算可能溢出 |
关键点:如果 n=100,两种写法没区别;如果 n=10亿,公式法瞬间出结果,循环法可能跑几秒。
4. 实战建议
先写对的,再写快的。
日常开发中:
- n < 1万:循环就够了,别过度优化
- n > 100万:考虑公式化或流式处理
- 面试遇到:先说循环,再主动提出公式优化——展示你看到了”问题有更优解”
总结
1+2+…+100 这个问题藏着编程的两层思维:
- 第一层:循环累加——通用、稳妥
- 第二层:数学建模——找到规律,一步到位
下一步:用同样思路看 1²+2²+...+n²、1×2 + 2×3 + ... 这类问题,先找公式再写代码。