1.递归概念
所谓递归,说人话就是在函数内部,去调用自己
2.递归条件:
1.自己调用自己。
2.要有结束条件。
3. 实际举例:
n的阶乘
#阶乘求n的阶乘
def faction(n):
if n==1:
return 1
else:
return n*faction(n-1)
print(faction(5))
结果 : | 120 |
---|
4.栈溢出
- 如果递归的次数太大,会造成栈溢出的情况。*
#阶乘求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 |
---|
5.栈溢出解决:尾递归
尾递归 | 调用自己的时候没有任何表达式。 |
---|
#阶乘求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的栈溢出情况,不过还是要提一下,至少要认识,这对于学习其他语言是很有好处的。