我写了以下代码:
def incr_num(x, y):
while x <= y:
print x
incr_num(x+1, y)
当我将其作为
调用时incr_num(1, 10)
它进入无限循环并提供此输出:
1
2
3
4
5
6
7
8
9
10
10
10
10
10
10
10
(number 10 keeps repeating)
我原以为打印数字1-10。我无法理解为什么不这样做。有人可以告诉我为什么会这样。
我正在使用python2.7。
答案 0 :(得分:4)
incr_num(x+1, y)
一直被调用直到x == y
,然后递归结束,然后你返回上一次执行x=9
,所以x
仍然有它传递的值,x <= y
并不是假的。因此递归再次发生并打印10
在递归调用之后,你至少需要一个x+=1
。
我不会直接在递归中调用while循环;)如果这是结束递归的基本情况,那么你需要if x<=y
答案 1 :(得分:4)
如果您的循环永久执行,则必须表示条件x <= y
始终为True
。考虑一下:
while x <= y:
print x
这是您的代码的简化版本,但这基本上就是您正在做的事情。
尝试:
def incr_num(x, y):
if x <= y:
print x
incr_num(x+1, y)
这会打印数字1
到10
。
答案 2 :(得分:4)
正确的版本是:
def incr_num(x, y):
if x <= y:
print x
incr_num(x+1, y)
请注意,对于每个递归函数调用,x最多打印一次。
更新:
你的功能不起作用的原因是incr_num(10,10)
打印10然后调用incr_num(11,10)
,它会立即返回。在此之后,incr_num(10,10)
继续。它不会突破while
循环并继续下一次迭代,打印10
并再次调用incr_num(11,10)
。如您所见,这个循环并没有结束。
答案 3 :(得分:3)
您的条件应该是if条件而不是while循环,因为您没有在while循环中更改x的值,并且每次条件变为true并进行递归调用。
这是它的更正版本
def incr_num(x, y):
if x <= y:
print x
incr_num(x+1, y)