
本文详解如何用迭代法正确计算1到n的累加和(即n + (n-1) + … + 2 + 1),指出常见循环逻辑错误,对比两种等效循环写法,并引入o(1)时间复杂度的数学公式解法。
本文详解如何用迭代法正确计算1到n的累加和(即n + (n-1) + … + 2 + 1),指出常见循环逻辑错误,对比两种等效循环写法,并引入o(1)时间复杂度的数学公式解法。
在初学循环结构时,一个典型误区是混淆循环变量 i 与被累加项之间的关系。你提供的代码片段:
for (int i = 1; i < num; i++) {
s += n - 1; // ❌ 恒为常量!未随i变化
}存在两个关键问题:
- 表达式 n - 1 是固定值,不随循环变量 i 改变,导致每次都在重复加同一个数(如 n=5 时,始终加 4);
- 循环范围错误:i
✅ 正确的迭代思路应确保:
- 每轮累加一个递减或递增的动态项;
- 循环执行恰好 n 次。
✅ 方案一:从 n 递减累加(贴合题意描述)
int sum = 0;
int n = 5; // 示例输入
for (int i = 0; i < n; i++) {
sum += n - i; // i=0→加5, i=1→加4, i=2→加3, ..., i=4→加1
}
// 结果:sum = 15此处 sum += n - i 等价于 sum = sum + (n - i),是复合赋值运算符,语义清晰且高效。
✅ 方案二:从 1 递增累加(更直观,等价变形)
int sum = 0;
int n = 5;
for (int i = 1; i <= n; i++) {
sum += i; // i=1→加1, i=2→加2, ..., i=5→加5
}
// 结果同样为 15该写法逻辑更贴近数学定义 ∑_{i=1}^n i,也避免了 n-i 的索引偏移理解成本。
⚡ 方案三:直接使用高斯求和公式(最优解)
对于等差数列 1, 2, 3, ..., n(首项 a₁=1,末项 aₙ=n,项数 n),其和为: [ S_n = \frac{n \times (n + 1)}{2} ] Java 实现简洁高效:
int n = 5; int sum = n * (n + 1) / 2; // 整数运算无精度损失,时间复杂度 O(1)
? 注意事项
-
整数溢出风险:当 n 极大(如 > √Integer.MAX_VALUE ≈ 46340)时,n*(n+1) 可能溢出,建议使用 long 类型:
long sum = (long) n * (n + 1) / 2;
- 边界验证:实际应用中需校验 n ≥ 1,负数或零应返回 0;
- 递归 vs 迭代:递归虽直观,但深度过大易栈溢出;迭代与公式法更健壮。
掌握这三种方法,不仅能修正循环逻辑错误,更能理解算法优化的本质:从 O(n) 迭代迈向 O(1) 数学洞察。

















