我有两个在Python中使用二进制搜索进行搜索的程序
计划1:
def bin(alist,x):
if len(alist)==0:
return False
else:
mid=len(alist)//2
if (alist[mid]==x):
return True
else:
if alist[mid] < x:
#print(alist[mid+1:],x)
bin(alist[mid+1:],x)
else:
#print(alist[:mid],x)
bin(alist[:mid],x)
print (bin([2,3,5,8,9],8))
print (bin([2,3,5,8,9],7))
节目输出:
None
None
计划2:
def bin(alist,x):
if len(alist)==0:
return False
else:
mid=len(alist)//2
if (alist[mid]==x):
return True
else:
if alist[mid]<x:
return bin(alist[mid+1:],x)
else:
return bin(alist[:mid],x)
print(bin([1,5,7,8,9],10))
print(bin([1,4,5,8,9],8))
节目输出:
False
True
为什么会这样?
答案 0 :(得分:0)
在您的程序1中,只有当列表为空或您在列表中间搜索的值时,它才会返回布尔值,这是因为您明确说return
len(alist)==0
}和return True
当遇到if (alist[mid]==x):
时,您必须对其余条件执行相同的操作
def bin(alist,x):
if len(alist)==0:
return False
else:
mid=len(alist)//2
if (alist[mid]==x):
return True
else:
if alist[mid] < x:
#print(alist[mid+1:],x)
bin(alist[mid+1:],x) # -------> return
else:
#print(alist[:mid],x)
bin(alist[:mid],x) # -------> return
当您递归调用bin()
方法并期望一个布尔值时,您必须在上面突出显示的行中添加return。