在使用递归函数时候,会逻辑清晰,但是也会导致很多问题,最常见的是栈溢出,因为递归调用是通过栈这种数据结构实现的,计算机的栈并不是无限的,所以需要改造
一般来说,递归都可以改变成循环,但是常见的还是改成尾递归
比如阶乘:
def fact(x):
if n==1:
return 1
return x*fact(x-1)
这里函数的返回值是一个函数表达式,所以是递归,需要进行改造,改成尾递归
def fact(x):
return fact_in(x,1)
def fact_in(num,product):
if num==1:
return 1
else:
return fact_in(num-1,num*product)