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 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论