如何修正递归实现的两整数闭区间求和Java代码的错误
问题修正方案
你的代码存在两处关键错误,导致计算结果偏离预期:
基准条件错误:
当start == end时,你返回start + end,相当于把同一个数重复加了两次。比如参数都是6时,正确结果应该是6,但你的代码返回12,直接导致后续递归的总和偏大。start > end分支重复累加:
当start > end时,你返回end + sumInt(end, start),这里额外加了一次end,但sumInt(end, start)本身已经会把end纳入求和范围,造成了重复计算。
修正后的代码如下:
public static int sumInt(int start, int end) { // 基准条件:两数相等时返回该数本身 if (start == end) { return start; } // start小于end时,累加当前start后递归计算start+1到end的和 else if (start < end) { return start + sumInt(start + 1, end); } // start大于end时,直接递归调用交换参数后的方法,无需额外累加 else { return sumInt(end, start); } }
验证结果:
- 输入
sumInt(2,6):计算过程为2+3+4+5+6=20,返回正确。 - 输入
sumInt(6,2):会直接调用sumInt(2,6),同样返回20,符合需求。
内容的提问来源于stack exchange,提问作者KodaNotABear
相关产品推荐
相关产品推荐

