Syn_Wll 2022-04-21 20:45 采纳率: 80%
浏览 25
已结题

关于二分法查找问题里,查找时返回的函数里上限与下限的问题

问题遇到的现象和发生背景

构建函数,使用二分法对对应数在序列中的索引进行查找。

问题相关代码,请勿粘贴截图
def search(sequence, number, lower, upper):
    if lower == upper:
        assert number == sequence[upper]
        return upper
    else:
        middle = (lower + upper) // 2
        if number > sequence[middle]:
            return search(sequence, number, middle + 1, upper)
        else:
            return search(sequence, number, lower, middle)

运行结果及报错内容

以上代码是正确的,想不通为什么如果number大于sequence[middle]时候,返回的函数里要将下限的middle + 1,而如果小于或等于sequence[middle]时候,这里的上限middle不用减1。

我的解答思路和尝试过的方法
我想要达到的结果

能详细解释一下这里的原因和代码思路最好,谢谢了!

  • 写回答

2条回答 默认 最新

  • 关注

    因为你判断是 if number > sequence[middle]: number 大于 middle下标的值,所以middle下标转成lower时就要+1 原来middle下标已经小于number就不用再比较了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?