(...不要问数组值,它们是拉丁美洲食品品牌,已成为一些 friend 的内部笑话)。
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
但是,这就是当我注释掉所有打印语句以使其返回 idx
或 None
,然后用 替换调用时得到的结果print(binSearch(myArray, "Manaos"))
和 print(binSearch(myArray, "Coca-Cola"))
:
None
None
它显然应该返回 3
和 False
但它什么也没返回。我做错了什么?
最佳答案
您不会返回:
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
关于python - 为什么我的递归二分搜索函数没有返回任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770770/