看似简单的递归函数以无限循环结束

kri*_*ket 5 python recursion

我写了以下代码:

def incr_num(x, y):
    while x <= y:
        print x
        incr_num(x+1, y)
Run Code Online (Sandbox Code Playgroud)

当我调用它时

incr_num(1, 10)
Run Code Online (Sandbox Code Playgroud)

它进入一个无限循环并给出这个输出:

1
2
3
4
5
6
7
8
9
10
10
10
10
10
10
10

(number 10 keeps repeating)
Run Code Online (Sandbox Code Playgroud)

我期待它打印数字1-10.我无法理解为什么不这样做.有人可以告诉我为什么会这样.

我正在使用python2.7.

Tim*_*mD1 4

正确的版本是:

def incr_num(x, y):
    if x <= y:
        print x
        incr_num(x+1, y)
Run Code Online (Sandbox Code Playgroud)

请注意,每次递归函数调用最多打印一次 x。

更新:您的函数不起作用的原因是incr_num(10,10)打印 10 然后调用incr_num(11,10),它立即返回。此后,incr_num(10,10)继续。它不会跳出循环while并继续进行下一次迭代,再次打印10和调用。incr_num(11,10)正如您所看到的,这个循环并没有结束。