我的问题是关于二进制搜索的实现

时间:2018-11-24 15:44:55

标签: python binary-search

我是一位新的python程序员,他了解二进制搜索算法,并尝试对其进行python实现。 我的代码是:

def binsearch(a, t) :
    length = len(a)
    if length == 1 and a[0] == t:
        return True
    elif t > a[length-1] or t < a[0]:
        return False
    else:
        d = int(length/2)
        if t == a[d-1]:
            return True
        elif t < a[d-1]:
            g = a[:d]
            binsearch(g, t)
        else:
            g = a[:d]
            binsearch(g, t)
f = [x for x in range(100)]
print(binsearch(f, 24))

当我使用a = [x表示范围(100)中的x]运行函数且t = 24时,它返回None。 请让我知道原因。

2 个答案:

答案 0 :(得分:0)

Firs问题是,在拆分数组而不返回数组时,您只是在调用binsearch()。第二个问题是,例如,如果t> 50,您将启动g到数组的前半部分,而不是在第二个条件块上执行g = a[d:]

def binsearch(a, t):
    length = len(a)
    if length == 1 and a[0] == t:
        return True
    elif t > a[length-1] or t < a[0]:
        return False
    else:
        d = int(length/2)
        if t == a[d-1]:
            return True
        elif t < a[d-1]:
            g = a[:d]
            return binsearch(g, t)
        else:
            g = a[d:]
            return binsearch(g, t)
f = [x for x in range(100)]

print(binsearch(f, 24)) # -> True
print(binsearch(f, 66)) # -> True
print(binsearch(f, 100)) # -> False

答案 1 :(得分:0)

与其他编程语言不同,必须从函数中显式返回一个值。在您的代码中,您需要编写:

return binsearch(g, t)

要理解它,假设您的代码重复执行3次,则返回值将类似于:

|  # starts with 1st recursion into 2nd
return binsearch(g, t):
|  # into 3rd
return (return binsearch(g, t))

现在最里面的一个产生它的值:

return True

它沿着递归链向下传递:

return (return (return True))
|  # evaluate 3rd recursion
return (return True)
|  # evaluate 2nd recursion 
return True
# evaluate 1st recursion