python编写函数fun(ls,target,low,high), 递归实现二分法查找。 对有序列表ls=[7,9,12,34,57,89,123,221,345,456]进行二分法查找,根据查找目标数据target。若查找成功,返回True;否则返回False。 low表示查找区域起始位置;high表示查找区域终止位置
时间: 2023-05-27 17:04:07 浏览: 163
def fun(ls, target, low, high):
if low <= high:
mid = (low + high) // 2
if ls[mid] == target:
return True
elif ls[mid] > target:
return fun(ls, target, low, mid - 1)
else:
return fun(ls, target, mid + 1, high)
else:
return False
ls=[7,9,12,34,57,89,123,221,345,456]
target = 57
print(fun(ls, target, 0, len(ls) - 1)) # True
target = 100
print(fun(ls, target, 0, len(ls) - 1)) # False
相关问题
编写函数fun(ls,target,low,high), 递归实现二分法查找。对有序列表ls=[7,9,1
二分法查找是一种高效的查找算法,可以通过将有序列表分成两部分,并比较目标值与列表中间元素的大小关系来确定目标值在前半部分还是后半部分。根据题目给出的函数fun(ls, target, low, high),可以通过递归实现二分法查找。
首先,我们需要定义函数fun(ls, target, low, high),其中ls是有序列表,target是要查找的目标值,low和high分别是列表的起始索引和结束索引。
然后,在函数内部,我们可以首先判断low是否小于等于high,如果不满足,则表示查找没有结果,返回-1。
接下来,我们可以找到列表的中间位置mid,可以通过计算得到:
mid = (low + high) // 2
然后,我们可以判断目标值与中间元素的大小关系。如果目标值等于中间元素,那么说明找到了目标值,直接返回mid。
如果目标值小于中间元素,说明目标值在前半部分,可以通过递归调用函数fun(ls, target, low, mid-1)来在前半部分继续查找。
如果目标值大于中间元素,说明目标值在后半部分,可以通过递归调用函数fun(ls, target, mid+1, high)来在后半部分继续查找。
最后,如果以上条件都不满足,表示在整个列表中没有找到目标值,函数返回-1。
综上所述,可以得到如下代码实现:
def fun(ls, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if target == ls[mid]:
return mid
elif target < ls[mid]:
return fun(ls, target, low, mid-1)
else:
return fun(ls, target, mid+1, high)
编写函数fun(ls,target,low,high), 递归实现二分法查找。 对有序列表ls=[7,9,12,34,57,89,123,221,345,456]进行二分法查找,根据查找目标数据target。若查找成功,返回True;否则返回False。 low表示查找区域起始位置;high表示查找区域终止位置
好的,让我来回答你的问题。下面是对应的Python代码:
```python
def fun(ls, target, low, high):
if low > high: # 如果查找区域不存在,返回False
return False
mid = (low + high) // 2 # 计算区域中间位置的下标
if ls[mid] == target: # 如果目标值等于中间位置的值,返回True
return True
elif ls[mid] > target: # 如果目标值在查找区域的左侧,递归查找左侧区域
return fun(ls, target, low, mid-1)
else: # 如果目标值在查找区域的右侧,递归查找右侧区域
return fun(ls, target, mid+1, high)
# 测试代码
ls = [7, 9, 12, 34, 57, 89, 123, 221, 345, 456]
target = 89
print(fun(ls, target, 0, len(ls)-1)) # 输出 True
```
对于上述代码,首先定义了一个名为`fun`的函数,其中`ls`表示要查找的有序列表,`target`表示要查找的目标数据,`low`表示查找区域的起始位置,`high`表示查找区域的终止位置。函数的实现方式是递归的二分法查找。
如果查找区域起始位置`low`大于终止位置`high`,说明查找区域不存在目标数据,返回`False`。否则,根据区域中间位置的下标`mid`,判断目标数据在左侧还是右侧,然后递归地对左侧或右侧区域进行查找。
最后,利用输入的有序列表`ls`和目标数据`target`进行测试,输出查找结果即可。
阅读全文