我正在学习递归,正在阅读有关head
和tail
递归的内容。它被告知头递归首先进行递归调用,然后对结果进行计算。另一方面,尾递归在首先进行递归调用之前进行所有处理。
头递归可以减少传递给递归调用的数据,而尾递归可以导致将其他数据传递给递归调用。
所以,基本上我想知道使用一个而不是另一个有什么好处?以及如何知道在给定函数中使用哪一个。
AFAIK下面的幂函数(为整数定义)正在使用head recursion
:
def power(num, exponent):
if exponent <= 1:
return num
else:
return num * power(num, exponent-1)
注意:
我们使用递归的真正原因是一种在“路径”上存储值的简单方法。供将来使用。递归存储每个级别的算法状态,并允许用户稍后返回到该确切状态。我们将在使用树遍历例程时看到这一点。
如果有人能够对上述陈述有所了解,那将是一件好事,因为我认为这对于获得更深入的见解非常重要。
答案 0 :(得分:0)
有一种称为尾调用优化的东西,它对函数式编程很重要。我想对于那个你需要尾递归。但是对于python而言,它就像是等等。虽然仅仅为了论证,看起来头部递归可能会转换为尾递归。
目:
def power(num, exponent):
if exponent <= 1:
return num
else:
temp = power(num, exponent-1)
return temp*num
尾:
def power(num, exponent,init = 1):
if exponent <= 1:
return num*init
else:
init = num*init
return power(num, exponent-1, init)
如果这总是可行的并且如果解释器足够聪明,就优化而言,你做的递归应该无关紧要。