python二分查递归
前言
在计算机科学中,二分查是一种查算法,也称为折半查,是一种在有序数组中查某一特定元素的搜索算法。
在这篇文章中,我们将介绍如何使用Python程序实现递归二分查。
(注:“有序数组”指的是从小到大排列的数组)
算法思路
二分查的基本思路是通过将有序数组分成两个部分,判断目标元素在左侧或右侧部分,并继续缩小查范围,直到到目标元素或范围缩小为零。
递归二分查和普通二分查的区别在于,递归二分查将查过程分成两个步骤:先判断目标元素在左侧还是右侧,并继续递归调用本身实现查。
递归终止条件为目标元素已到或范围缩小为零。
代码实现
以下是递归二分查的Python代码实现:
def recursive_binary_search(arr, target):
if len(arr) == 0:
return -1
else:
mid = len(arr) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return recursive_binary_search(arr[:mid], target)
else:
result = recursive_binary_search(arr[mid+1:], target)
if result == -1:
python 定义数组 return -1
else:
return mid + 1 + result
代码中,传入待查的有序数组arr与目标元素target。
首先判断数组arr的长度是否为0,如果为0,则代表数组中没有目标元素,返回-1;否则,取数组arr中间的元素arr[mid]。
比较arr[mid]与目标元素target的大小,如果相等,则表示到目标元素,返回该元素的下标mid。
如果arr[mid]大于target,则递归调用函数并传入左侧部分的数组arr[:mid]和目标元素target;如果arr[mid]小于target,则递归调用函数并传入右侧部分的数组arr[mid+1:]和目标元素target。
当递归调用返回-1时,表示没有到目标元素,返回-1;当递归调用返回值不为-1时,返回的值表示在左侧部分的下标值(即0~mid-1),需要加上mid+1,才是该元素在原数组中的下标。
实例演示
以下实例演示如何使用递归二分查在有序数组中查目标元素。
我们先定义一个有序数组arr:
arr = [2, 5, 8, 23, 45, 50, 60, 68]
现在,让我们查数组中的某个目标元素,例如23:
target = 23
result = recursive_binary_search(arr, target)print("The result is:", result)
运行程序,输出结果为:
The result is: 3
结果表示目标元素23在数组中的下标为3。
我们再查一个不存在的目标元素,例如30:
target = 30
result = recursive_binary_search(arr, target)print("The result is:", result)
运行程序,输出结果为:
The result is: -1
结果表示在数组中没有目标元素30。
结论
到这里,我们已经成功使用Python程序实现递归二分查算法。
递归二分查相比于普通的二分查,虽然代码略微复杂,但是实现了递归调用,使得代码的可读性更高,并且可以更方便地用于其他递归算法的实现。同时,在处理大型有序数组时,递归二分查的效率更高。
总之,递归二分查是一种非常有用的算法技术,在实际开发中也有广泛的应用。希望本篇文章能帮助大家更深入地理解和掌握递归二分查算法的实现和应用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论