因为栈的大小不是无限的,因此递归调用的次数过多便会致使栈的溢出,一般解决栈溢出的方法python
是尾递归优化,尾递归跟循环的效果同样,它在函数返回时调用函数自己,并在return语句不能包函数
含表达式。编译器和解释器就能够对尾递归进行优化,递归自己不管调用多少次都只占用一个栈帧优化
,从而避免栈的溢出。递归
代码实现:编译器
#!usr/bin/python3it
# -*- coding:UTF-8 -*-编译
def fact(m):coding
return fact_item(n, 1)循环
def fact_item(num, p):方法
if num == 1:
return p
return fact_item(num - 1, num * p)
print(fact(5))
代码的调用过程:
=====> fact_item(5, 1)
=====> fact_item(4, 5)
=====> fact_item(3, 20)
=====> fact_item(2, 60)
=====> fact_item(1, 120)
>>> 120
从结果就能够看到,调用尾递归的时候若是作出优化后,栈就不会增加,因此无论调用多少次都不会
致使栈溢出。