【问题标题】:Why is my recursive binary search function not returning anything?为什么我的递归二进制搜索函数不返回任何内容?
【发布时间】:2015-04-30 12:02:15
【问题描述】:

(......不要问数组值,它们是拉丁美洲的食品品牌,与一些朋友开玩笑)。

def binSearch(arr, i, lower=0, upper=None):
    if upper is None:
        upper = len(arr)+1
    idx = (lower+upper)//2
    if arr[idx] == i:
        print(idx, arr[idx],'\n')
        #return idx
    elif arr[idx] != i and upper-lower<2:
        print("Not found \n")
        #return False
    elif arr[idx] < i:
        print(idx, arr[idx])
        binSearch(arr, i, idx, upper)
    elif arr[idx] > i:
        print(idx, arr[idx])
        binSearch(arr, i, lower, idx)

myArray = ["Chabona", "F-Nandito VII", "La Bichy", "Manaos", "Martín y Enzo", "Pitusas", "Trompis", "Ugi's", "VAMOS MANAOS", "Villamanaos"]

binSearch(myArray, "Manaos")
binSearch(myArray, "Coca-Cola")

这个程序完全符合我的预期——它输出如下:

5 Pitusas
2 La Bichy
3 Manaos 

5 Pitusas
2 La Bichy
1 F-Nandito VII
Not found

但是,当我注释掉所有打印语句以使其返回 idxNone,然后将调用替换为 print(binSearch(myArray, "Manaos"))print(binSearch(myArray, "Coca-Cola")) 时,这是我得到的:

None
None

它显然应该返回 3False 但它什么也没返回。我做错了什么?

【问题讨论】:

    标签: python python-3.x recursion return


    【解决方案1】:

    你没有回来:

    return binSearch(arr, i, lower, idx)
    

    您还需要返回您的条件:

    def binSearch(arr, i, lower=0, upper=None):
        if upper is None:
            upper = len(arr)+1
        idx = (lower+upper)//2
        if arr[idx] == i:
            print(idx, arr[idx],'\n')
            return idx # return 3/idx
        elif arr[idx] != i and upper-lower<2:
            print("Not found \n")
            return False  # return False
        elif arr[idx] < i:
            print(idx, arr[idx])
            return binSearch(arr, i, idx, upper)
        elif arr[idx] > i:
            print(idx, arr[idx])
            return binSearch(arr, i, lower, idx)
    
    print(binSearch(myArray, "Manaos"))
    print(binSearch(myArray, "Coca-Cola"))
    
    5 Pitusas
    2 La Bichy
    3 Manaos 
    
    3
    5 Pitusas
    2 La Bichy
    1 F-Nandito VII
    Not found 
    
    False
    

    【讨论】:

    • 谢谢,这成功了!如果我理解正确,这意味着我的递归调用正在运行该函数,但由于它们没有返回值,它没有“到达”主调用,不是吗?
    • 你没有返回任何东西,所以如果你不指定返回值,它将默认返回 None 。
    • python 导师帮忙看看发生了什么pythontutor.com/visualize.html#mode=display
    猜你喜欢
    • 2020-05-17
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2012-08-23
    • 2021-04-14
    • 2019-10-12
    相关资源
    最近更新 更多