首页 > 解决方案 > Python二进制搜索算法返回无

问题描述

因此,我尝试在 python 中进行二进制搜索,我认为这在语法上是正确的,但在逻辑上某个地方出了问题,尽管检查了无数次。这是我的代码。

def m(a,ele):
    a=a
    ele=ele

    length = len(a)
    if length <=1:
        return a
    mid = a[length//2]

    if ele == mid:
        return True
    elif ele > mid:
        print("if")
        if len( a[a.index(mid):]) == 0:
            return False
        elif len( a[a.index(mid):]) ==1 and ele !=  a[a.index(mid):]:
            return False
        elif len( a[a.index(mid):]) ==1 and ele ==  a[a.index(mid):]:
            return True
        else:
            m( a[a.index(mid):],ele)
    else:
        print("else")
        if len( a[:a.index(mid)]) == 0:
            return False
        elif len( a[:a.index(mid)]) ==1 and ele !=  a[:a.index(mid)]:
            return False
        elif len( a[:a.index(mid)]) ==1 and ele ==  a[:a.index(mid)]:
            return True
        else:
            m( a[:a.index(mid)],ele)


print(m([1,3,6,8],8))

所以,在这种情况下,它应该打印 True,但它打印的是 None。有关此代码的任何帮助都会有所帮助,我知道我正在犯一些愚蠢的错误。

标签: python

解决方案


您需要返回每一步递归的结果。(在所有其他的)

else:
       return m( a[a.index(mid):],ele)

推荐阅读