You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化sumRange函数?寻求两整数区间求和的更优实现

嘿,我来帮你梳理下这段sumRange函数的优化方向,顺便聊聊怎么让它更简洁高效~

首先先说说原代码里的小问题:

  • 你定义了f和t两个变量,但从头到尾都没用到,属于冗余代码,完全可以删掉;
  • 用循环累加的方式虽然能实现功能,但如果遇到超大范围的数值(比如从1加到100万),循环会执行百万次,性能不如数学公式法;
  • 分to >= from和from > to两种情况判断其实没必要,完全可以用更通用的逻辑统一处理。

最优方案:用等差数列求和公式

其实从FROM到TO的整数和就是等差数列求和,公式是:
总和 = (项数) × (首项 + 末项) ÷ 2
这里的项数就是两个数之间的整数个数(包括两端),用Math.abs(to - from) + 1就能算出,不管from和to谁大谁小都适用。

优化后的代码如下:

function sumRange(from, to) {
  const numberOfTerms = Math.abs(to - from) + 1;
  return numberOfTerms * (from + to) / 2;
}

这个版本的优势太明显了:

  • 时间复杂度是O(1),不管数值范围多大,都能瞬间算出结果;
  • 代码极度简洁,没有冗余变量和分支判断;
  • 所有边界情况都能覆盖(比如from等于to时,返回的就是这个数本身,完全正确)。

如果一定要用循环实现(比如练习循环逻辑)

那也可以优化原代码的逻辑,不用分分支,先统一拿到起始和结束值,再循环累加:

function sumRange(from, to) {
  const start = Math.min(from, to);
  const end = Math.max(from, to);
  let result = 0;
  for (let i = start; i <= end; i++) {
    result += i;
  }
  return result;
}

这个版本去掉了冗余变量,逻辑更清晰,也不用写两套循环逻辑,可读性更高。

内容的提问来源于stack exchange,提问作者crisscross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:14:55