第二模块第18章 函数递归

Posted libyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二模块第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)

 

以上是关于第二模块第18章 函数递归的主要内容,如果未能解决你的问题,请参考以下文章

第二模块:函数编程(学位课程):(第1章)函数装饰器迭代器内置方法

第二模块第20章 模块

第二模块 3.8 函数的递归

JavaScript语言精粹

第8章 模块

python基础知识