我正在获得价值"没有"在我的节目中?我哪里出错?
lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)
mid = (start+end)/2
def binary_search(i):
global mid,start,end
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = (start+end)/2
elif i>lis2[mid]:
start = mid+1
mid = (start+end)/2
else:
return "Not Found"
binary_search(i)
print(binary_search(6))
感谢任何帮助。谢谢!
答案 0 :(得分:1)
存在三个错误 -
binary_search(i)
而不是return binary_search(i)
start > end
,如果发生ti,则元素不存在。end
初始化为len(lis2)
,如果您尝试搜索列表中不存在且大于最大元素的元素,则会给IndexError: list index out of range
清单(比如23)。因此,将end = len(lis2)
更改为end = len(lis2)-1
正确代码 -
lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)-1
mid = int((start+end)/2)
def binary_search(i):
global mid,start,end
if(start>end):
return "Not Found"
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = int((start+end)/2)
elif i>lis2[mid]:
start = mid+1
mid = int((start+end)/2)
return binary_search(i)
print(binary_search(6))
答案 1 :(得分:0)
在函数结束时,需要在调用函数recursivley时返回结果:
def binary_search(i):
global mid,start,end
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = (start+end)/2
elif i>lis2[mid]:
start = mid+1
mid = (start+end)/2
else:
return "Not Found"
return binary_search(i) # <----- EDITED