递归二分查找,切片分切



我正在尝试使用递归和"消除"在整数列表上实现二进制搜索。每次通过对列表进行切片来获取项目的一半。我写了一些,但在我应该返回" 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)

如果没有找到该值,则返回False;否则它返回索引。二进制搜索递归执行。

对代码的关键添加是return函数调用。我添加了一些return a+b if a != False else a逻辑,如果值不在可迭代对象中,则处理返回False

def binary_search(iterable, target):
# if the list is down to one element, and it isn't the target, return False
if len(iterable) == 1 and iterable[0] != target: return False

left_index = 0
right_index = len(iterable)
mid = (left_index + right_index) // 2
if iterable[mid] == target:
return mid
elif iterable[mid] < target:
iterable = iterable[mid:right_index]
v = binary_search(iterable,target)
# if v is not False, add it to the left side of the window and return
# else return False
return v + mid if v != False else v
elif iterable[mid] > target:
iterable = iterable[left_index:mid]
v = binary_search(iterable,target)
return v + left_index if v != False else v

相关内容

  • 没有找到相关文章