- 递归调用是通过栈(stack)数据结构实现的,解决递归调用栈溢出的方法是尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
- 尾递归的方式: 在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。
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)