1、最简单的递归函数:求阶乘
def fact(n):
if n==1:
return 1
return n*(fact(n-1))
问题:fact(1000)将出现栈溢出
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\pythons\fact.py", line 4, in fact
return n*(fact(n-1))
File "D:\pythons\fact.py", line 4, in fact
return n*(fact(n-1))
File "D:\pythons\fact.py", line 4, in fact
return n*(fact(n-1))
[Previous line repeated 994 more times]
File "D:\pythons\fact.py", line 2, in fact
if n==1:
RecursionError: maximum recursion depth exceeded in comparison
优化:尾递归
def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num==1:
return product
return fact_iter(num-1,num*product)