所谓递归即在函数内部,去调用自己
条件:
1.自己调用自己。
2.要有结束条件。
举例:
n的阶乘
#阶乘求n的阶乘 def faction(n): if n==1: return 1 else: return n*faction(n-1) print(faction(5))
| 结果 : | 120 |
|---|
如果递归的次数太大,会造成栈溢出的情况。
#阶乘求n的阶乘 def faction(n): if n==1: return 1 else: return n*faction(n-1) print(faction(1000))
| 结果 | RecursionError: maximum recursion depth exceeded in comparison |
|---|
解决方法:尾递归
| 尾递归 | 调用自己的时候没有任何表达式。 |
|---|
#阶乘求n的阶乘 def faction(n): return fact_iter(n,1) def fact_iter(num,product): if num==1: return product return fact_iter(num-1,num*product) print(faction(5))
调用自己
| 结果 | maximum recursion depth exceeded in comparison |
|---|
如上所示,尾递归不是一定能解决栈溢出,其他语言对于栈溢出有所优化,尾递归不会增加其栈的长度,但python对于此没有优化,所以严格意义上,尾递归并不能实际解决python的栈溢出情况,不过还是要提一下,至少要认识,这对于学习其他语言是很有好处的。



