[英]Why is my recursive binary search function not returning anything?
(...不要問有關數組的價值,他們是與一些朋友開玩笑的拉丁美洲食品品牌)。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.