所谓尾递归,return语句后面跟的一定没有新的变量,只需要一个栈,只需要递归调用它本身,所有的运算操作全部放在尾递归函数的参数列表中进行。

例:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

def tailrecsum(x, running_total=0): if x == 0: return running_total else: return tailrecsum(x - 1, running_total + x) //理论上类似上面:tailrecsum(5, 0) tailrecsum(4, 5) tailrecsum(3, 9) tailrecsum(2, 12) tailrecsum(1, 14) tailrecsum(0, 15) 15

 

事实上,每次进行尾递归,都是具体数值在运算,之所以叫做尾递归,因为此函数一直在调用自己,期待着最尾部的结束条件,再次强调,调用的过程中没有使用新的未知变量,不需要同递归一样开辟新的内存。

 

所以,使用尾递归思想编程解决问题时,要把最尾部的结束条件确定好,把尾递归到达结束条件时return出去的东西写成我们期待尾递归计算出的东西,把具体的操作放在函数的参数上实现。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄