构建函数,使用二分法对对应数在序列中的索引进行查找。
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就不用再比较了
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!