书上把尾递归的好处吹上天,不动手试试还真不知道,试了之后才发现性能果然很不错
一般书上的关于递归都会用斐波那契数列来讲,我们今天也用这个例子
def falist(num):
if num<=0:
return 0
elif num==1:
return 1
else:
return falist(num-2)+falist(num-1)
尾递归指在递归函数里面,吧递归调用的代码写在最后一行
def falist1(num, temp1=0, temp2=1):
if num==0:
return temp1
return falist1(num-1, temp2, temp1+temp2)
这里把计算得中间变量也作为函数参数传入,减少了大量的计算
当然,这里效率的巨大提升,不能全部归功于尾递归。尾递归的最大作用就是不使用堆栈,也就不会有溢出的说法