def binary_search(lst,target,ub,lb):
mid=(ub+lb)/2
if target==lst[mid]:
return target
elif target>lst[mid]:
mid =(mid+ub)/2
return binary_search(lst,target,ub,mid)
elif target<lst[mid]:
mid =(mid+lb)/2
return binary_search(lst,target,mid,lb)
elif ub<lb:
return 'No target value found'
else:
return mid
答案 0 :(得分:0)
ub<lb
是此递归的基本条件。所以,必须首先检查。
def binary_search(lst,target,ub,lb):
mid=(ub+lb)/2
if ub<lb:
return 'No target value found'
elif target==lst[mid]:
return target
elif target>lst[mid]:
mid =(mid+ub)/2
return binary_search(lst,target,ub,mid)
elif target<lst[mid]:
mid =(mid+lb)/2
return binary_search(lst,target,mid,lb)
答案 1 :(得分:0)
你可以在没有递归的情况下编写算法,然后它不会达到最大递归深度:
def binary_search(lst,target,ub,lb):
mid=(ub+lb) // 2
while target != lst[mid]:
if target > lst[mid]:
lb =(mid+ub) // 2
if target < lst[mid]:
ub =(mid+lb) // 2
if ub<lb:
return 'No target value found'
mid=(ub+lb) // 2
return mid
两个注释:
1°。边界更新中存在错误,两个边界更新都会跳过一半的项目。
2º。除法运算符/
在python 3上返回一个浮点数,你想使用底层除法//
>> 3/5
0.6
>> 3//5
0