程序没看懂 输出的答应是看懂了
最后的这个 print a, '-->', c 这个完全不理解 麻烦大神把整个程序解释一下 谢谢了。
最后的这个 print a, '-->', c 这个完全不理解 麻烦大神把整个程序解释一下 谢谢了。
2019-04-11
def move(n, a, b, c):
if n ==1:
print a, '-->', c #1.1 一个圆盘直接从A放到C
return
move(n-1, a, c, b) #2.1 先将n-1个盘从A放到B
print a, '-->', c #2.2 然后把A剩余的1个盘从A放到C
move(n-1, b, a, c) #2.3 最后把从A放到B的那n-1个盘从B放到C
move(3, 'A', 'B', 'C')
看备注感觉好简单,但是这个程序运行的流程还得细细研究
move(4,a,b,c)
n=4 ,所以if不运行
运行 move(3,a,c,b)#目的是把3个盘子放到b
进入move(3,a,c,b)中,n'=n-1=3,if不运行
运行move(2,a,b,c)#目的是把2个盘子放到c
进入move(2,a,b,c)中,n''=n'-1=n-2=2,if不运行
运行move(1,a,c,b)#目的先把一个盘子放到a
n'''=1,运行if,打印出 print a-->c
move(3,'A','B','C')
move(n,a,b,c) #第一次调用 传值'A','B','C' 此时n=3,a='A',b='B',c='C'这几个值在本次调用中都不变
#if(n == 1) n=3不走
move(n-1,a,c,b) #调用主函数,传值n=2,a='A',c='C',b='B',将值传入,注意传入的是值,将2,'A','C','B'按位置传下去,也就是move(2,'A','C','B')
move(n,a,b,c) #此处进入第一层循环 用值a='A',b='C',c='B' 此时n=2,a='A',b='C',c='B'循环 这几个值在本层调用中都不变
if n ==1
print(a,'-->',c) # n!= 1 跳过
return
move(n-1,a,c,b) #此时传参 传入 a=A ,b= C ,c=B 得到 a=Ab=Bc=C, 即 move(1,A,B,C),进入第二层循环
move(1,a,b,c) # 用参 move(1,A,B,C)
if n== 1
print( # 此时n=1,打印 a-->c 即 A-->C
return
print(a , '-->', c) # 此处回到第一层循环第一次递归,即 move(2,a,b,c) 实参是 move(2,A,C,B),即打印 A-->B
move(n-1,b,a,c) #第二层循环最后一步, 实参是a=A,b=C,c=B ,则 move(1,=C,A,B)
move(n, a,b,c) # 用参 按位置 代入实参 move(1,=C,A,B)
if n==1:
print(a,'-->',c) # n=1 打印 a-->c, 即C-->B
return ## return函数, 所以第二层执行完了,回到move(3, a, b, c)
print (a , '-->', c) # 函数实参move(3,A,B,C) ,即 打印 A-->C
move(n-1, b, a, c) # 传参,move(2,B,A,C)
move(2,a,b,c) # 用参得到 a= B , b=A , c=C move(2,B,A,C)
if n==1:
print(a, '-->', c) # n!= 1 跳过
return
move(n-1, a, c, b) # 传入实参 move(2,B,A,C) 得到 move(1,B,C,A)
move(n, a, b, c) # 用参 move(1,B,C,A)
if n==1:
print(a, '-->', c) # n==1 打印 a-->c 即 B-->A
return
print(a,'-->',c) #即 B-->C
move(n-1,b,a,c) # 传参 a= B , b=A , c=C,得出新函数 move(1,A,B,C)
move(1,a,b,c) # 用参
if n==1:
print(a,'-->',c) # n=1 打印a-->c 即 A-->C
return
举报