在Python中进行二进制搜索时出错。代码有什么问题?

时间:2011-02-03 11:51:44

标签: python

import math 

def BinarySearch( A , val , low , high ):
    if high < low :
        return -1 #not found 
    mid = low + (high - low ) /2 
    if A[mid] > val:
        return BinarySearch(A,val , low , high )
    if A[mid] < val :
        return BinarySearch(A,val,low,high)
    else: 
        return mid #found 


A = [ 12 , 23 , 2 , 33 , 123 , 4 , 5 , 2 , 54 , 555 , 21 ]
BinarySearch( A , 0 , 0, 10)

我试图在不使用bisect模块的情况下进行二进制搜索。但它给出了一个错误,例如这个

 File "doubtrob.py", line 8, in BinarySearch
    return BinarySearch(A,val , low , high )
RuntimeError: maximum recursion depth exceeded

3 个答案:

答案 0 :(得分:4)

def BinarySearch( A , val , low , high ):
    if high < low :
        return -1 #not found                                                                                                                                 
    mid = low + (high - low ) /2
    if A[mid] > val:
        return BinarySearch(A, val , low , mid-1 )
    if A[mid] < val :
        return BinarySearch(A, val, mid+1 ,high)
    else:
        return mid #found 

递归必须有一个终点。你一直在调用相同的参数,因此永远不会满足high<low,所以永远不会terminates

答案 1 :(得分:1)

您在每次迭代时使用完全相同的搜索空间。此外,你需要在高 - 低&lt; 2,否则mid最终会等于低,你可能仍然陷入无限循环。

另外,您可以更简单地mid获得(low + high)/2

答案 2 :(得分:1)

提示:在2返回的BinarySearch()调用中,你继续使用相同的参数调用它,所以它会在下一次调用时保持循环到同一个位置,这会一直调用相同的参数......

这确实是一个功课问题。提示结束。