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

为什么我的JavaScript二分查找while循环无法退出,会无限打印匹配索引?

死循环原因

核心问题是匹配到目标值后没有终止循环,也没有修改first/last的边界值:当array[midpoint] == value时,代码仅打印了索引,first和last始终满足first <= last的循环条件,每次计算的midpoint都是同一个固定值,程序会无限重复打印匹配结果,永远不会退出循环。

修复代码

如果需求是找到目标值索引后直接结束查找,在打印语句后添加break(终止循环)或return(结束函数)即可:

function binary_search(value, array){
  var first = 0;
  var last = array.length - 1;

  while(first <= last){
    var midpoint = Math.floor((first + last) / 2);

    if(array[midpoint] == value){
      console.log(midpoint);
      break; // 找到后立即终止循环,解决死循环问题
      // 如果需要返回索引可替换为 return midpoint;
    }else if(array[midpoint] < value){
      first = midpoint + 1;
    }else{
      // 无需额外判断大于,前两个条件已覆盖相等、小于的场景
      last = midpoint - 1;
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:03