递归、二分查找(主要是程序例子)

本文探讨了递归算法的应用,包括阶乘、幂次方计算及Fibonacci数列生成,并对比分析了两种二分查找算法的时间效率,旨在帮助读者深入理解递归与查找算法的实现与优化。

1.递归

1.1 求n!


1.2 求幂次方


1.3 fibonacci数列


2.二分查找返回查找数在列表中的index

2.1原例



2.2修改例



根据查找运算时间和函数调用次数对比这两个例子。


search([2,4,5,7,8,9],2,0,5)改/原search([2,4,5,7,8,9],9,0,5)改/原

search([2,4,5,7,8,9],5,0,5)原/改 search([2,4,5,7,8,9],7,0,5)原/改

search([2,4,5,7,8,9],4,0,5)改/原search([2,4,5,7,8,9],8,0,5)改/原

对比发现:原例程序主要对第一个和最后一个元素查找速度快,整体上修改例运行速度比原例快。

windows系统用time.clock( )

linux系统用time.time( )


### 递归实现二分查找算法 #### 算法解释 二分查找是一种高效的搜索算法,适用于已排序的数据集。通过每次将搜索范围减半来快速定位目标值的位置。当采用递归方式实现时,函数会不断调用自身,在缩小后的子区间内继续执行相同的逻辑直到找到目标键或确定其不存在。 #### 实现细节 为了确保代码能够正确处理边界条件并保持高效性,以下是几个需要注意的地方: - **终止条件**:如果 `low` 超过 `high` 则表示未找到目标键; - **中间位置计算**:为了避免溢出风险,推荐使用 `(low + high) >>> 1` 或者更安全的方式如 `int mid = low + ((high - low) >> 1)` 来获取中间索引[^1]; #### Python 示例代码 下面是基于上述原则编写的Python版本的递归二分查找实现: ```python def recursive_binary_search(data, key, low=None, high=None): # 初始化上下界 if low is None or high is None: low, high = 0, len(data)-1 # 终止条件: 当前区间为空则返回False if low > high: return False # 计算中间点 mid = low + (high - low) // 2 # 如果找到了就立即返回True if data[mid] == key: return True elif data[mid] < key: # 向右递归寻找更大的部分 return recursive_binary_search(data, key, mid+1, high) else: # 向左递归寻找更小的部分 return recursive_binary_search(data, key, low, mid-1) # 测试例子 sorted_array = [1, 3, 5, 7, 9] print(recursive_binary_search(sorted_array, 5)) # 输出应为True ``` 此段程序展示了如何利用递归来简化二分查找过程中的循环结构,并且遵循了之前提到的关键要点以保证效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值