我正在研究python中的河内递归实现塔。在我的文章中,我给出了不同点的印刷品,以便更好地了解
def hanoi(n, src, inm, dest):
print "n=",n,"src=",src,"inm=",inm,"dest=",dest
if n == 0:
return
hanoi(n-1, src, dest, inm)
print src, '->', dest
print n
hanoi(n-1, inm, src, dest)
hanoi(2,'A','B','C')
答案如下:
n= 2 src= A inm= B dest= C
n= 1 src= A inm= C dest= B
n= 0 src= A inm= B dest= C
A -> B
1
n= 0 src= C inm= A dest= B
A -> C
2
n= 1 src= B inm= A dest= C
n= 0 src= B inm= C dest= A
B -> C
1
n= 0 src= A inm= B dest= C
我能理解到
1
n= 0 src= C inm= A dest= B
我无法理解A - >此后打印C.在调用n = 0 src = A inm = B dest = C之后,我知道将返回函数。有效功能是n = 1 src = A inm = C dest = B.那会怎么样?
请解释跟踪
答案 0 :(得分:1)
如果你仔细想想,这是完全合理的。
等等。换句话说,您感到困惑的是在最外层函数中进行的第二次hanoi
调用。
答案 1 :(得分:1)
如果再添加两张照片:
print "r1" # before first return
print "r2" # at the end of the function, before second, implicit return
然后你会看到连续有两个回报:
n= 2 src= A inm= B dest= C
n= 1 src= A inm= C dest= B
n= 0 src= A inm= B dest= C
r1
A -> B
1
n= 0 src= C inm= A dest= B
r1
r2
A -> C
2
n= 1 src= B inm= A dest= C
n= 0 src= B inm= C dest= A
r1
B -> C
1
n= 0 src= A inm= B dest= C
r1
r2
r2