geekdoc-python-zh/docs/askpython/binary-search-recursion.md

2.9 KiB

在 Python 中使用递归的二分搜索法

原文:https://www.askpython.com/python/examples/binary-search-recursion

在本教程中,我们将了解如何借助递归实现二分搜索法。我希望现在你已经熟悉了二分搜索法和递归。

为了让你更简单,我们将简要地介绍它们。


什么是二分搜索法?

二分搜索法是一种高效快速的算法,用于在元素的排序列表中查找元素。

它通过重复将数组一分为二来查找元素,然后比较除法的中间部分来识别元素可能出现在哪个除法中。

为了实现二分搜索法,我们需要三个指针,即下界、上界、和一个中间指针

子阵列的划分由下限和上限定义,而中间指针值与需要定位的元素的值进行比较。

在这里阅读更多关于二分搜索法:Python 中的二分搜索法算法


什么是递归?

现在,二分搜索法可以用许多方式来实现,下面提到了其中的一些:

  1. 使用循环的二分搜索法算法
  2. 使用二叉查找树的二分搜索法算法

在本教程中,我们将借助递归实现二分搜索法。

当一个函数调用本身可以是一个直接或间接的调用,以解决一个较小的问题或同一类型的一个较大的问题时,这种技术被称为递归

在这里阅读更多关于递归的内容:Python 中的递归


使用递归的二分搜索法实现

让我们在这里用 Python 实现递归的二分搜索法算法。我添加了带有注释的代码,以帮助您理解每一行的作用。

def Binary_Search(arr,n,lb,ub,X):

    # 1\. List is empty
    if(n==0):
        print("ERROR!")

    # 2\. If element is not found lb exceeds ub    
    elif(lb>ub):
        print("Not found!")

    # 3\. Keep searching for the element in array
    else:
        mid = int((lb+ub)/2)
        if(arr[mid]==X):
            print(mid+1)
        elif(arr[mid]>X):
            Binary_Search(arr,n,lb,mid,X);
        elif(arr[mid]<X):
            Binary_Search(arr,n,mid+1,ub,X);

arr = [1,2,3,4,5,6,7,8,9]
n = len(arr)
X = int(input())
Binary_Search(arr,n,0,n-1,X)


输出

Original List is:  [1, 2, 3, 4, 5, 6, 7, 8, 9]
Element to Search for:  90
Result: Not found!

Original List is:  [1, 2, 3, 4, 5, 6, 7, 8, 9]
Element to Search for:  5
Result: 5


结论

在本教程中,我们了解了如何借助递归以及二分搜索法和递归的一些基础知识来实现二分搜索法。

希望你喜欢这个教程!感谢您的阅读!

敬请关注更多此类教程!😇