由于递归函数调用自己,因此编写这样的函数时很容易出错,进而导致无限循环。例如,假设你要编写一个像下面这样倒计时的函数。

> 3...2...1

为此,你可以用递归的方式编写,如下所示。

def countdown(i):
    print i
    countdown(i-1)

如果你运行上述代码,将发现一个问题:这个函数运行起来没完没了!

> 3...2...1...0...-1...-2...

(要让脚本停止运行,可按Ctrl+C。)

编写递归函数时,必须告诉它何时停止递归。正因为如此, 每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case) 。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。

我们来给函数countdown添加基线条件。

现在,这个函数将像预期的那样运行,如下所示。

results matching ""

    No results matching ""