简述递归
所谓递归即在函数内部,去调用自己
条件:
1.自己调用自己。 2.要有结束条件。
举例:
n的阶乘
#阶乘求n的阶乘
def faction(n):
if n==1:
return 1
else:
return n*faction(n-1)
print(faction(5))
如果递归的次数太大,会造成栈溢出的情况。
#阶乘求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的栈溢出情况,不过还是要提一下,至少要认识,这对于学习其他语言是很有好处的。
|