python-使用递归实现二分法

巧了我就是萌 提交于 2020-03-06 21:45:38

在上一篇中简单介绍了递归的使用,请戳这里 。  在此篇中,主要介绍如何用递归实现二分法。

在使用二分法之前,首先要有个前提,那就是这个数组必须是有序数组。主要的思路为:

   ①先取出数组中的一个中间值, 和我们需要找的数字进行对比,如果恰好相等,则说明找到该数字,如果数组的中间值大于需要查找的数组,接下来的查找范围就为中间值之前的数组。反之为中间值之后的数组

    ②对数组不断的缩小范围,最后当数组中只有一个数字时,再进行比较,如果相等,则找到,否则需要查找的数字就不在我们的数组中。

 

代码如下:

def binary_search(data_source, find_number):
    """定义二分法"""
    mid = int(len(data_source)/2)                    #先取数组中的中间值
    if len(data_source) > 1:                         #判断整个数组中的数字个数
        if data_source[mid] > find_number:
            print('data is left of %s' % data_source[mid])
            binary_search(data_source[:mid], find_number)
        elif data_source[mid] < find_number:
            print('data is right of %s' % data_source[mid])
            binary_search(data_source[mid:], find_number)
        else:
            print('find the number %s' % find_number)
    elif len(data_source) == 1:                      #如果没有这个判断,当只剩一个数字时,会进入死循环
        if data_source[mid] == find_number:
            print('find the number %s' % find_number)
        else:
            print('not find the number')
            
if __name__ == '__main__':
    data = list(range(1, 8, 2))                      #一个包含为[1, 3, 5, 7]的有序列表
    number = 1          
    binary_search(data, number)
                                        
-----结果-----
data is left of 5
data is left of 3
find the number 1

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!