头或尾递归?哪个是解决需要递归结构的问题的首选方法?

时间:2015-10-19 05:40:05

标签: algorithm recursion

我正在学习递归,正在阅读有关headtail递归的内容。它被告知头递归首先进行递归调用,然后对结果进行计算。另一方面,尾递归在首先进行递归调用之前进行所有处理。

头递归可以减少传递给递归调用的数据,而尾递归可以导致将其他数据传递给递归调用。

所以,基本上我想知道使用一个而不是另一个有什么好处?以及如何知道在给定函数中使用哪一个。

AFAIK下面的幂函数(为整数定义)正在使用head recursion

def power(num, exponent):
  if exponent <= 1:
    return num
  else:
    return num * power(num, exponent-1)

注意:

  

我们使用递归的真正原因是一种在“路径”上存储值的简单方法。供将来使用。递归存储每个级别的算法状态,并允许用户稍后返回到该确切状态。我们将在使用树遍历例程时看到这一点。

如果有人能够对上述陈述有所了解,那将是一件好事,因为我认为这对于获得更深入的见解非常重要。

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)

如果这总是可行的并且如果解释器足够聪明,就优化而言,你做的递归应该无关紧要。