尾遞迴 - 不良實踐

當從函式返回的唯一東西是遞迴呼叫時,它被稱為尾遞迴。

這是使用尾遞迴編寫的倒計時示例:

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 編譯器不處理尾遞迴呼叫的優化。像這樣的情況下的遞迴解決方案比等效的迭代解決方案使用更多的系統資源。