标签: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)
标签:mit 尾递归 必须 递归调用 list 递推 设置 应该 type
原文地址:https://www.cnblogs.com/libyan/p/13193840.html