递归二分查找

同步看代码、数组范围缩小动画,以及递归调用树为什么只有 O(log n) 层。

Python 代码

高亮当前这一步真正执行到的判断分支
1def binary_search_recursive(arr, left, right, target):
2    if left > right:
3        return -1
4    mid = (left + right) // 2
5    if arr[mid] == target:
6        return mid
7    if arr[mid] < target:
8        return binary_search_recursive(arr, mid + 1, right, target)
9    return binary_search_recursive(arr, left, mid - 1, target)

数组范围变化

准备展示搜索过程
点击“生成过程”,观察搜索区间如何不断减半。
arr
left-
mid-
right-
每次递归调用都只保留一半区间。

递归调用树

实际上只沿一条分支继续向下调用