如何用循环计算逐次递减上限的区间累加和?
实现rangeSum函数的正确方式
你的代码只完成了一轮区间累加,没处理y递减后重复执行累加的核心逻辑,所以达不到需求。我们需要通过两层循环来实现:外层循环控制y的递减,内层循环计算每一轮x到当前y的数值和。
正确代码实现
function rangeSum(x, y) { let sum = 0; // 外层循环:只要y不小于x,就继续执行累加流程 while (y >= x) { // 内层循环:累加当前x到y的所有数值 for (let i = x; i <= y; i++) { sum += i; } // 每轮累加完成后,y递减1 y--; } return sum; }
验证示例(rangeSum(0, 3))
执行流程如下:
- 第一轮y=3:累加0+1+2+3,sum=6
- 第二轮y=2:累加0+1+2,sum=6+3=9
- 第三轮y=1:累加0+1,sum=9+1=10
- 第四轮y=0:累加0,sum=10+0=10
- 此时y递减为-1,小于x=0,循环结束,返回10,完全符合预期。
原代码问题说明
- 仅用单个
for循环,只计算了一次初始x到y的和,没有处理y递减后的重复累加逻辑 - 末尾的
sum += i + i--属于多余且逻辑错误的操作,会导致结果偏离预期 - 循环变量
i未用let声明,会变成全局变量,这是新手需要避免的不良习惯
内容的提问来源于stack exchange,提问作者Plane350
相关产品推荐
相关产品推荐

