递归函数返回none?

时间:2015-07-31 07:01:59

标签: python recursion

我编写了以下函数以实现我自己的二进制搜索

def bisect(input, target):
    mid = len(input)/ 2
    if len(input) == 1:
        if input[0] == target:
            return 1
        else:
            return None
    elif input[mid] > target:
        bisect(input[:mid], target)
    elif input[mid] <= target:
        bisect(input[mid:], target)

我知道我的实现已经关闭,但是我更了解这里的递归堆栈。

当我致电bisect(['d','e'], 'd')时,我的函数应该返回

的值
bisect(['d'], 'd')

但是它返回None。此外,当我直接调用bisect(['d'], 'd')时,我得到正确的值0.这怎么可能?

1 个答案:

答案 0 :(得分:4)

您忽略了递归调用的返回值。您还需要显式地返回这些内容:

elif input[mid] > target:
    return bisect(input[:mid], target)
elif input[mid] <= target:
    return bisect(input[mid:], target)

递归调用就像任何其他函数调用一样;他们将结果返回给调用者。如果忽略返回值并且调用函数结束,则最终使用该调用函数,然后返回None