【发布时间】:2021-10-25 23:47:49
【问题描述】:
我正在尝试使用递归在整数列表上实现二进制搜索,并通过每次对列表进行切片来“消除”一半的项目。我写了一些,如果达到目标值,我有点卡在我应该返回“True”的部分。我会反复检查“左”是否大于“右”,但我想让函数的参数尽可能简单。
def binary_search(iterable, target):
left_index = 0
right_index = len(iterable)
mid = (left_index + right_index) // 2
if iterable[mid] == target:
return True
elif iterable[mid] < target:
iterable = iterable[mid:right_index]
print(iterable)
binary_search(iterable,target)
elif iterable[mid] > target:
iterable = iterable[left_index:mid]
print(iterable)
binary_search(iterable,target)
【问题讨论】:
-
“我会反复检查 'left' 是否大于 'right',但我想让函数的参数尽可能简单。” - 为什么会 '左”是否大于“右”?为了使二分搜索起作用,必须对输入进行排序。
-
因为这是返回 False 的条件,因为这意味着该项目不在列表中,也许我解释得不好
-
如果您想查看您的回报,只需在两个 elif 中的所有函数调用之前添加
return,如果您的输入已排序,您也不需要 2 个 elif。但这只是为了你不会得到None,如果有人输入不在列表中的数字,你仍然会遇到很多问题,你会得到一个无限循环。
标签: python recursion binary-search