码迷,mamicode.com
首页 > 其他好文 > 详细

第二模块第18章 函数递归

时间:2020-06-26 11:14:58      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:mit   尾递归   必须   递归调用   list   递推   设置   应该   type   

egon老师知乎文章:

https://zhuanlan.zhihu.com/p/109119148

函数递归准确地讲, 应该叫函数的递归调用: 是函数嵌套调用的一种特殊形式.

具体是指: 在调用一个函数的过程中, 又直接或间接调用到了本身. 

其实, 函数的递归调用就是循环.

 

# 示例1: 在调用函数f的过程中直接调用了它本身
def f():
    print(f)
    f()
f()
‘‘‘
注意: python对递归的层级有限制, 不允许无穷调用下去, 默认限制是1000层.
可以对限制的层级进行设置, 但是不应该进行设置.
‘‘‘

# 示例2: 间接调用本身
def f1():
    print(f1)
    f2()
def f2():
    print(f2)
    f1()
f1()

# 一段代码循环运行的方式有两种:
# 方式一: while循环, for循环
while True:
    print(aaa)
    print(bbb)
    print(ccc)
# 方式二: 函数递归
def f3():
    print(aaa)
    print(bbb)
    print(ccc)
    f3()
f3()

‘‘‘
递归的本质就是循环, 用于重复运行代码.
已经有了while循环还存在递归的原因是, 递归在某些场景下用起来比while循环更简单.
强调: 不要无限运行下去, 这样容易导致内存溢出. 必须在满足某种条件下结束递归, 即使用return.
为此, python提供了可以设置限制的方法: sys.setrecursionlimit(). 但是尽量不要去设置.
了解: python中没有尾递归优化
‘‘‘

#  示例:
def func(n):
    if n > 10:
        return
    print(n)
    n += 1
    func(n)
func(1)

‘‘‘
递归的两个阶段:
回溯: 一层一层调用下去
递推: 满足某种结束条件, 结束递归调用, 然后一层一层返回
‘‘‘
# 应用示例
l = [1, 2, [3, [4, [5, [6, [7, [8, 9, 10]]]]]]]
def func(lst):
    for i in lst:
        if type(i) is list:
            func(i)
        else:
            print(i)
func(l)

 

第二模块第18章 函数递归

标签:mit   尾递归   必须   递归调用   list   递推   设置   应该   type   

原文地址:https://www.cnblogs.com/libyan/p/13193840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!