Python 2中的二进制搜索变量不更新导致无限循环.....为什么变量不更新?

时间:2013-09-12 22:56:29

标签: python search binary

这是我的二分搜索。 mid不会更新,无限循环。

def binary_search (z, A, start, end):
    if len(A) == 0:
        return None
    else:
        mid = start + (end - start) / 2
        if (z < A[mid]) and (z > A[mid-1]):
            return A[mid-1]
        elif (z < A[mid]):
            return binary_search(z, A, start, mid)
        elif (z > A[mid]):
            return binary_search(z, A, mid, end)

1 个答案:

答案 0 :(得分:1)

def binary_search (z, A, start, end):
    if end < start:
        return None
    else:
        mid = start + (end - start) / 2
        if (z < A[mid]):
            return binary_search(z, A, start, mid-1)
        elif (z > A[mid]):
            return binary_search(z, A, mid+1, end)
        else: 
            return mid

我改变了一些事情。

我首先检查更改了end < start:,因为if len(A) == 0:将保持不变,并且不允许您将其用作基本案例。

此外,当您返回二进制搜索时,您需要跳过中间值,因为那是您要返回的值。

我测试了代码,但它确实有效!