【发布时间】:2015-10-19 05:40:04
【问题描述】:
我正在学习递归,并且正在阅读有关 head 和 tail 递归的信息。被告知头递归首先进行递归调用,然后对结果进行计算。另一方面,尾递归在首先进行递归调用之前完成所有处理。
头递归可以减少传递给递归调用的数据,而尾递归可以导致向递归调用传递额外的数据。
所以,基本上我想知道使用一个比另一个有什么好处?以及如何知道在给定函数中使用了哪一个。
AFAIK 下面的幂函数(为整数定义)正在使用head recursion:
def power(num, exponent):
if exponent <= 1:
return num
else:
return num * power(num, exponent-1)
注意:
我们使用递归的真正原因是为了以一种简单的方式将值存储在“路径”上以供将来使用。递归存储是每个级别的算法状态,并允许用户稍后返回到该确切状态。我们将在使用树遍历例程时看到它的使用。
如果有人能对上述陈述有所了解,那就太好了,因为我认为这对于获得更深入的见解非常重要。
【问题讨论】:
-
在 Python 的情况下,尝试尾递归不会有任何好处 b/c 它不支持它,并且根据this SO,它永远不会。
-
@IanMercer 我认为我的问题完全不同,我已经定义了什么是尾递归。我问的是什么时候一个人比另一个人更受欢迎。
-
关于尾递归的事情是,如果涉及尾调用优化,解释器不会在到达返回行时立即记录算法的状态,并且它不会记录这一点,因为它确实不需要。
-
@IanMercer 我根本不认为这是一个重复的问题。请在标记之前查看问题详细信息,这可能会导致一个可能很好的问题仍未得到解答。