现有一个已排序的数组,请使用递归二分法查找出元素第一次出现的位置
时间: 2024-02-05 21:11:25 浏览: 36
好的,我可以为您提供一个递归的二分查找算法来解决这个问题。
假设我们要在已排序的数组 `arr` 中查找元素 `target` 出现的第一个位置,我们可以编写以下递归函数:
```python
def binary_search(arr, target, left, right):
if left > right:
return -1
mid = (left + right) // 2
if arr[mid] == target:
if mid == 0 or arr[mid-1] < target:
return mid
else:
return binary_search(arr, target, left, mid-1)
elif arr[mid] > target:
return binary_search(arr, target, left, mid-1)
else:
return binary_search(arr, target, mid+1, right)
```
该函数接受四个参数:已排序的数组 `arr`、要查找的元素 `target`、当前查找区间的左右边界 `left` 和 `right`。函数首先判断查找区间是否有元素,如果没有则返回 `-1` 表示查找失败。然后计算出中间位置 `mid`,如果 `arr[mid] == target`,则表示找到了目标元素,接下来判断它是否是第一个出现的位置,如果是则返回 `mid`,否则继续在左半边查找。如果 `arr[mid] > target`,则说明目标元素在左半边,继续在左半边查找;如果 `arr[mid] < target`,则说明目标元素在右半边,继续在右半边查找。
最后,我们可以调用该函数来查找元素第一次出现的位置:
```python
arr = [1, 2, 3, 3, 3, 4, 5, 6]
target = 3
left = 0
right = len(arr) - 1
print(binary_search(arr, target, left, right)) # 输出 2
```
在这个示例中,元素 `3` 第一次出现的位置是索引 `2`。