没有返回的递归函数继续循环?



我正在玩一个数独求解器,遇到了这个有趣的行为。 当我输入一个数字 (0,5( 时,函数将继续上升到上限 (5(。 一旦达到限制,它仍然会继续打印我的数字 (a(,但会降低值? (如下所示(。

这是为什么呢?

def solver(a):
print("->",a)
if a == 0 or a == 5:
return
else:
a = a+1
print("-->",a)
solver(a)
print("---")
print(a)

-> 2
--> 3
-> 3
--> 4
-> 4
--> 5
-> 5
---
5
---
4
---
3

这可能有助于您了解正在发生的事情: 我添加了一个变量recursionLevel以便您可以看到递归打印数字的级别。

def solver(a, recursionLevel):
print("->",a, recursionLevel)
if a == 0 or a == 5:
return
else:
a = a+1
print("-->",a, recursionLevel)
solver(a, recursionLevel + 1)
print("---")
print(a, recursionLevel)

solver(2, 0)

这给出了:

-> 2 0
--> 3 0
-> 3 1
--> 4 1
-> 4 2
--> 5 2
-> 5 3
---
5 2
---
4 1
---
3 0

如您所见,较小的数字来自较浅的递归级别,这些递归级别在递归调用返回后继续执行。 较高的值是这些更深层次调用的本地值,不会影响调用方中的值。

最新更新