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

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

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

问题相关代码,请勿粘贴截图
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。

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

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

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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632