- 递归函数
在函数内部调用自身本身
计算阶乘:
def fact(n): if n == 1: return 1 return n * fact(n - 1)
注意:使用递归函数需要防止栈溢出。
在计算机中,函数调用是通过栈(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)
fact(n)函数,由于return引入乘法表达式所以不是尾递归
fact_iter(num,product)函数,仅返回递归函数本身
尾递归调用如果做了优化,栈不会增长,无论多少次调用也不会导致栈溢出。
python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题
来源:https://www.cnblogs.com/DJC-Allen/p/17173570.html
本站部分图文来源于网络,如有侵权请联系删除。