尾递归 - 不良实践

当从函数返回的唯一东西是递归调用时,它被称为尾递归。

这是使用尾递归编写的倒计时示例:

def countdown(n):
    if n == 0:
        print "Blastoff!"
    else:
        print n
        countdown(n-1)

可以使用递归进行任何可以使用迭代进行的计算。这是使用尾递归编写的 find_max 版本:

def find_max(seq, max_so_far):
    if not seq:
        return max_so_far
    if max_so_far < seq[0]:
        return find_max(seq[1:], seq[0])
    else:
        return find_max(seq[1:], max_so_far)

尾递归在 Python 中被认为是一种不好的做法,因为 Python 编译器不处理尾递归调用的优化。像这样的情况下的递归解决方案比等效的迭代解决方案使用更多的系统资源。