递归实现二分查找(Python2.7)

本文详细介绍了二分查找算法的实现原理及应用。通过递归方式实现二分查找,并使用 Python 代码展示整个查找过程。从查找中间元素开始,根据比较结果调整查找范围,直至找到目标元素或确定元素不存在于列表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="python"># _*_ coding: utf-8 _*_
#二分查找
def BinarySearch(lists, left, right, key, tag, mid = 0, found = False):
    count = len(lists[left:right+1]) + 1
    if tag == 0:
        mid = count // 2
    elif tag == 1:
        mid += count // 2
    else:
        mid -= count // 2

    if lists[mid] == key:
        found = True
    else:
        while left < right:
            if lists[mid] > key:
                right = mid
                tag = 2
                return BinarySearch(lists, left, right, key, tag, mid, found)
            elif lists[mid] < key:
                left = mid + 1
                tag = 1
                return BinarySearch(lists, left, right, key, tag, mid, found)
    if found:
        print key, 'found, index is ', mid
    elif left >= right and not found:
        print key, 'is not found in lists'

L = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(0, 11):
    BinarySearch(L, key = i, left = 0, right=len(L)-1, tag = 0)








                
### 递归实现二分查找算法Python中,可以通过递归的方式实现经典的二分查找算法。该算法适用于**有序且可索引的序列**,其核心思想是通过不断将搜索区间折半来快速定位目标值的位置。递归实现的关键在于定义明确的终止条件以及如何缩小搜索范围。 以下是一个使用递归方法实现二分查找函数: ```python def binary_search_recursive(arr, target, low, high): if low > high: return -1 # 表示未找到目标值 mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: return binary_search_recursive(arr, target, mid + 1, high) else: return binary_search_recursive(arr, target, low, mid - 1) ``` #### 示例用法: ```python l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] target = 66 result = binary_search_recursive(l, target, 0, len(l) - 1) if result != -1: print(f"目标值 {target} 在列表中的索引为: {result}") else: print("目标值不在列表中") ``` #### 输出结果: ``` 目标值 66 在列表中的索引为: 17 ``` --- ### 注意事项与优化建议 - **递归深度限制**:Python默认的最大递归深度为998次[^2],如果数据规模较大,可能会导致`RecursionError`异常。对于非常大的数组,建议使用非递归(迭代)方式实现。 - **时间复杂度**:二分查找的时间复杂度为 $O(\log n)$,这使得它比线性查找更高效,尤其是在处理大规模数据时。 - **适用场景**:二分查找仅适用于**已排序**的数组或列表。若输入序列未排序,则需先进行排序操作。 --- ### 总结 递归实现二分查找代码简洁且逻辑清晰,但需要注意递归深度问题和终止条件设置。该算法适用于需要频繁查找特定元素的场景,尤其在数据量较大的情况下表现优异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值