第二模块第18章 函数递归

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)

猜你喜欢

转载自www.cnblogs.com/libyan/p/13193840.html
今日推荐