用python面向对象代码的二分法编写一个递归函数,在一个有序列表中查找一个元素,如果找到则返回其索引,否则返回-1。 输入要查找的数值输入数组长度n依次输入数组的值 如果存在,输出数组位置如果不存在,输出-1 。不使用内置函数。
时间: 2024-10-24 13:05:34 浏览: 15
在Python中,你可以使用面向对象的方式来编写一个基于二分搜索的递归函数。首先,我们创建一个`BinarySearch`类,并定义一个名为`search`的方法。这个方法会接收一个有序列表(列表中的元素是整数),一个目标值以及两个指针(左边界和右边界)作为参数。
下面是一个简单的示例:
```python
class BinarySearch:
def __init__(self, arr):
self.arr = arr
def search(self, target, left, right):
# 基线条件:左右指针相遇或交叉
if left > right:
return -1
mid = (left + right) // 2 # 计算中间索引
guess = self.arr[mid] # 获取中间元素值
# 如果中间元素就是要找的值,则返回它的索引
if guess == target:
return mid
# 否则,如果目标比中间小,继续在左半部分查找
elif guess > target:
return self.search(target, left, mid - 1)
# 否则,目标比中间大,继续在右半部分查找
else:
return self.search(target, mid + 1, right)
# 使用示例
arr = [1, 2, 3, 4, 5]
bs = BinarySearch(arr)
target = 3
index = bs.search(target, 0, len(arr) - 1)
if index != -1:
print(f"Element found at index {index}")
else:
print("Element not found")
```
阅读全文