溪明轩

  • Python全栈开发
  • 三溪杂选
  • 爬虫快速入门
  • 首页
  • 文章归档
  • 关于页面

  • 搜索
consul ELK Loki M3DB Thanos TSDB federate ALertmanager PromQL Grafana prometheus nginx Rest Framework 热视图 ansible 网络安全 云盘 wiki Python 爬虫

18、Python之函数递归

发表于 2020-12-01 | 分类于 Python函数 | 1 | 阅读次数 219

1、何为函数递归?

函数递归属于函数嵌套调用的一种特殊形式,特殊在当调用一个函数时直接或间接地调用到本身,即俗称的死循环!

2、为何用它?

当一段代码需要多次循环嵌套时,递归比for、while循环更适合!

3、如何用它?

展示前先思考一个问题,既然是死循环,应不应该让它无限循环下去?当然不应该了!内存会直接被拉爆!因此Python对函数递归的层数有限制,默认是1000层!

3.1、查看递归层数配置
import sys
print(sys.getrecursionlimit())

# 执行得到结果
1000
3.2、直接调用函数本身

递归达到了预设值1000而被终止

# 直接调用本身
def print_str():
    print('我是递归')
    print_str()
print_str()

# 执行得到结果
我是递归
我是递归
我是递归
我是递归
......
RecursionError: maximum recursion depth exceeded while calling a Python object
3.3、间接调用函数本身
def print_str():
    print('我是递归')
    recursion()

def recursion():
    print_str()

print_str()

# 执行得到结果
我是递归
我是递归
......
RecursionError: maximum recursion depth exceeded while calling a Python object

4、递归的两个阶段

上面说到递归是死循环不能让它无限下去,但是光靠Python的递归层级限制这种约束又显得太过宽松,我们需要给递归加上条件,当满足某种条件时结束递归调用,就跟while一样!因此,我们先来了解下Python递归两个阶段是什么!

4.1、回溯:

回溯就是递归调用一层一层地调下去

4.2、递推:

当满足某种结束条件后,结束递归调用,开始反向一层一层地结束调用

4.3、递归的应用

一段代码需要循环多次嵌套时,递归有时候比for、while循环更适合!来个稍微复杂一点的,取出下列神经病的列表中的每个值!

l2 = [33, 22, [66, [4, [99, [43, [75, [83, [92, 101, 131, [192, [130, ]]]]]]]]]]
def recursion(a):
    for i in a:
        if type(i) is list:  #判断迭代出来的值的类型是否为列表
            recursion(i)  #是则再次迭代取值嵌套的列表
        else:
            print(i)

recursion(l2)

# 执行得到结果
33
22
66
4
99
43
75
83
92
101
131
192
130

Process finished with exit code 0
Donate comment here
三溪 微信支付

微信支付

三溪 支付宝

支付宝

  • 本文作者: 三溪
  • 本文链接: https://blog.sanxi.info/archives/1-7--p-y-t-h-o-n-zhi-han-shu-di-gui
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请注明出处!
17、Python之表达式
19、Python算法之二分法
  • 文章目录
  • 站点概览
三溪

三溪

作诗不作法

120 日志
23 分类
20 标签
RSS
Creative Commons
Links
  • halo官网
  • 玻璃之空
0%
© 2022 三溪
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
世间微尘里 独爱茶酒中