希赛考试网
首页 > 软考 > 软件设计师

二分查找python代码递归

希赛网 2024-02-09 09:41:34

二分查找是一种高效的检索算法,常用于有序数组中查询某一元素的位置。而Python作为一种高级编程语言,也提供了多种实现二分查找的方法,其中递归法是一种常用的方式。

一、二分查找的基本思想

二分查找(Binary Search)原理是将有序数组分成左右两个子数组,每次都取中间位置的数进行比较,如果该数小于要查找的值,就选择右边的子数组继续进行查找,如果该数大于要查找的值,就选择左边的子数组继续进行查找,直到找到为止。

二、二分查找算法的时间复杂度分析

对于一个有 N 个元素的有序数组,每次查找过程都可以将其长度缩短一半,因此最坏情况下的查找次数为 log2N,即可得出时间复杂度为 O(logN)。

三、二分查找python代码实现

1、非递归法

def binary_search(arr, x):

low = 0

high = len(arr) - 1

while low <= high:

mid = (low + high) // 2

if arr[mid] < x:

low = mid + 1

elif arr[mid] > x:

high = mid - 1

else:

return mid

return -1

2、递归法

def binary_search(arr, low, high, x):

if low <= high:

mid = (low + high) // 2

if arr[mid] == x:

return mid

elif arr[mid] > x:

return binary_search(arr, low, mid - 1, x)

else:

return binary_search(arr, mid + 1, high, x)

else:

return -1

四、递归法实现细节分析

上述递归法实现中,需要注意以下几个细节:

1、递归函数的定义:首先需要定义一个递归的函数,输入的参数为数组,查找区间的下标范围low和high,以及要查找的值x。函数返回值为该值在数组中的下标,如果找不到则返回-1。

2、递归结束的条件:当查找区间的下标范围low>high时,说明该值不在数组中,返回-1。

3、获取查找中间位置的下标:对于一个查找区间,需要不断地确定其中间位置的下标mid,该下标可由mid = (low + high) // 2 得到。

4、判断当前位置处的值与目标值的关系:如果该位置处的值大于目标值,则说明目标值位于查找区间的左侧,调用函数时查找左半部分的数组;如果该位置处的值小于目标值,则说明目标值位于查找区间的右侧,调用函数时查找右半部分的数组。

五、二分查找python代码递归的优缺点

1、优点

(1)代码简单易懂:递归的代码相对于非递归的代码更加简单明了。

(2)代码风格一致:递归代码风格与其他的递归代码风格相同,适合组织成递归框架。

2、缺点

(1)空间复杂度较高:递归法在每一层递归时都需要存储变量的值,因此它需要大量的栈空间,如果递归层数过多会导致栈溢出的问题。

(2)效率相对于非递归方法较低:递归方法由于涉及到函数的调用和返回,相对于非递归方法,会有一定的时间和空间开销。

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划