递归函数
什么是递归:在函数中调用自身函数
1 2 3 4 5 6 7 8 9 10 11 12
| # 死循环 while 1: print(0)
# 如果用函数呢? def aa(): print('从前有座山') aa()
aa() #执行一部分后会报错 RecursionError: maximum recursion depth exceeded while calling a Python object # 超过递归最大深度--因为一直的开辟空间函数没有结束
|
测试递归深度
1 2 3 4 5 6 7 8 9 10
| n = 0 def xx(): global n n+=1 print(n ) xx()
xx()
# 打印到998
|
递归的默认深度是997/998是python从内存角度出发做的限制
递归的深度是可以修改的,但是即使设置的过大依然要由硬件决定(我的hp能达到3222)
1 2 3 4 5 6 7 8 9 10
| import sys sys.setrecursionlimit(10000000) n = 0 def xx(): global n n+=1 print(n ) xx()
xx()
|
如果你说需要1000次递归才能实现
我建议不要用递归,因为要1000次才能实现的需求说明递归不合适
递归的缺点
- 如果递归次数过多,就不适合用递归
- 递归的缺点:占内存
- 递归的优点:会让代码变简单
递归调用的定义
函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用
递归分为两个阶段:
经典问题==>阶乘
1 2 3 4 5 6 7 8 9
| def fn(n): if (n == 1): return 1; else: return fn(n-1) * n;
a = fn(5) print(a) # 120
|