python3-递归函数和二分法查找

系列文章目录

一、递归函数

  • 概念:

    函数的递归调用是指在函数的执行过程中,直接或间接的调用函数自身。它的效果类似于循环。

  • 格式:

    def foo():
        print('嘤嘤嘤')
        foo()  # 自己调用自己
        
    foo()  # 会一直嘤嘤嘤
    
  • 递归出口:

    递归出口,类似于循环的结束标志,就是递归函数结束的标志,比如:某个整数值变为0时,就结束函数的递归调用。

    如果没有递归出口(比如上面的foo),则会陷入死循环,且会消耗完所有的内存空间。

  • 举例:

    打印嵌套列表中的所有元素,不打印列表:

    l = [1, 2,[3, 4, [5], 6], 7]
    
    def foo(l):
        for i in l:
            if type(i) is list:
                foo(i)  # 如果元素是列表类型,就调用自身继续判断
            else:
                print(i)
    
    foo(l)
    """
    打印:
    1
    2
    3
    4
    5
    6
    7
    """
    

二、二分法查找

  • 二分法查找是一种查找特定元素的算法:

    1. 先找到有序序列的中间元素。

    2. 判断该元素是否为要查找的目标元素。

    3. 如果是,表示找到目标元素,结束查找。

      如果不是,就判断中间元素与目标元素的大小。

    4. 如果,中间元素>目标元素:就从中间元素的左边(小于中间元素的部分)开始找起,从第1步开始。

      如果,中间元素<目标元素:就从中间元素的右边(大于中间元素的部分)开始找起,从第1步开始。

  • 举例:

    从有序列表中找出指定元素,使用递归的方法:

    l = [0, 3, 4, 5, 9, 17, 45, 67, 69, 76, 88, 91, 100, 111]
    
    
    def binary_search(l, target):
        if len(l) == 0:
            print('没找到!')
            return
            
        mid_index = len(l) // 2  # 中间元素的索引
        if l[mid_index] < target:
            l = l[mid_index+1:]
            binary_search(l, target)  # 递归调用,继续查找
        elif l[mid_index] > target:
            l = l[:mid_index]
            binary_search(l, target)  # 递归调用,继续查找
        else:
            print('找到了!')
    
    binary_search(l, 8)  # 打印:没找到!
    binary_search(l, 88)  # 打印:找到了!
    
    

    下一篇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值