如何理解尾递归

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

例:

 

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出去的东西写成我们期待尾递归计算出的东西,把具体的操作放在函数的参数上实现。

 

posted @ 2019-12-12 21:20  知亦行  阅读(689)  评论(0编辑  收藏  举报