写一个python程序第2题:假设已有列表a,其n个数值型元素已经从小到大排序完成。现输入另一数值x,现要求使用递归的二分法搜索x,如果x存在,则打印输出x在列表a中的下标,否则打印输出-1。
时间: 2024-02-03 08:13:52 浏览: 45
以下是一个递归实现的二分搜索算法的Python程序:
```python
def binary_search(a, x, left, right):
if left > right:
return -1
mid = (left + right) // 2
if a[mid] == x:
return mid
elif a[mid] < x:
return binary_search(a, x, mid+1, right)
else:
return binary_search(a, x, left, mid-1)
a = [1, 3, 5, 7, 9, 11, 13, 15]
x = 9
result = binary_search(a, x, 0, len(a)-1)
print(result)
```
在这个程序中,`binary_search` 函数接收四个参数:列表 `a`、要查找的值 `x`、搜索范围的左边界 `left` 和右边界 `right`。初始时,`left` 是列表的第一个元素的下标,`right` 是列表的最后一个元素的下标。如果 `left > right`,说明搜索范围为空,返回 -1 表示查找失败。否则,取中间位置 `mid`,如果 `a[mid] == x`,说明找到了要查找的值,返回 `mid` 表示其下标。如果 `a[mid] < x`,说明要查找的值在 `mid` 的右边,递归调用 `binary_search` 函数查找右边的范围。如果 `a[mid] > x`,说明要查找的值在 `mid` 的左边,递归调用 `binary_search` 函数查找左边的范围。
阅读全文