递归实现n+(n-1)+…+1正常,Java迭代版本出错求排查及语法解释
迭代实现1到n求和的问题修复与解释
先解释s += n - 1的含义
s += n - 1是Java的复合赋值语法,完全等价于 s = s + (n - 1)——就是把当前求和变量s的数值,加上(n-1)的结果,再重新赋值给s。但你这里的问题是,每次循环都加同一个固定值,而不是随着循环递减的目标数值,这是求和错误的核心原因。
你的代码问题分析
- 变量名不一致:循环条件用了
num,但求和逻辑用的是n,两个变量应该统一(比如都用n,因为n是用户输入的目标值) - 累加逻辑错误:你每次循环都加固定的
n-1,而不是依次加n、n-1、n-2...1这类递减的数,自然得不到正确的求和结果 - 循环条件逻辑不对:就算改成
<= num,因为累加的是固定值,结果依然会偏离正确值
修复后的迭代代码
有两种常见的正确写法:
写法1:从1累加到n
// 假设s初始化为0,n是用户输入的正整数 int s = 0; for (int i = 1; i <= n; i++) { s += i; // 每次累加当前的i,依次加1、2、3...n } return s;
写法2:从n累加到1
int s = 0; for (int i = n; i >= 1; i--) { s += i; // 每次累加当前的i,依次加n、n-1、n-2...1 } return s;
另外,如果追求效率,也可以直接用等差数列求和公式n*(n+1)/2,不需要循环,结果完全一致。
内容的提问来源于stack exchange,提问作者Upcoming_mathy
相关产品推荐
相关产品推荐

