一.函数递归
1.什么是递归调用
- 递归调用是函数嵌套调用的一种特殊形式
- 函数在调用时, 直接或间接调用了本身, 这就是递归调用
- 递归的本质就是循环
2.直接和间接调用本身示例
- 直接调用 : 死循环, 无意义
def f1():
print('from f1')
f1()
f1() # 当超过递归最大深度时报错 "RecursionError"
- 间接调用
def bar():
print('sa')
foo()
def foo():
print('sds')
bar()
foo() # 这样来回调用无意义, 当超过递归最大深度时报错 "RecursionError"
3.设置递归最大深度
- 调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无休止调用本身
- 为了防止其无限制占用内存,python 解释器的内存管理机制对函数的递归调用做了最大的层级限制
ps : 虽然可以修改, 但应该有边界, 不可能无限制的递归, 那样无意义, 递归应分为明确的两个阶段 (回溯, 递推)
import sys
print(sys.getrecursionlimit()) # 默认1000
sys.setrecursionlimit(2000) # 可以改