看不懂代码里的abc怎么换的同学可参考链接
def move(n, a, b, c): if n ==1: print a, '-->', c return move(n-1, a, c, b) print a, '-->', c move(n-1, b, a, c) move(4, 'A', 'B', 'C')
def move(n, a, b, c): if n ==1: print a, '-->', c return move(n-1, a, c, b) print a, '-->', c move(n-1, b, a, c) move(4, 'A', 'B', 'C')
2019-03-12
我按自己的理解:
简单讲解一下3和2层,然后自己验证4层的移动,验证move(4,a,b,c)的第一步骤move(3,a,c,b)下面的7个步骤就可以。
2层:
move (2,a,b,c)
#都会先判断是否为1
#然后不是,就会进行接下来三步: 1:move(n-1, a, c, b),2: print a, '-->', c,3:move(n-1, b, a, c)
1:move(1,a,c,b)#分析此处的内部运作
#因为是1,所以不走三步,直接执行if下print a-c,但是这里可能就导致不好理解了
#其实这里是指print 1位到3位,可见在 move(1,a,c,b)中,1位是a,3位是b
#打印结果是A--》B
2:print a-c #其实也是执行print本层move的 1位到3位
#在本层的move (2,a,b,c)中,1位是a,3位是c
#打印结果是A--》C
3:move(1,b,a,c)
#因为是1,所以执行print a-c---》print 1位到3位,1位是b,3位是c
#打印结果是B--》C
#后面不在重复打印的是本层move的1位到3位
AB AC BC
3层:
move(3,a,b,c)
#判断不是1
#进入接下来三步
1:move(2,a,c,b)
#这里的abc位置刚才没讲,因为刚才和程序的变化一样
#这里因为有多层,讲解一下:
#1步骤:move(n-1, a, c, b)程序的意思是,上层的move里的第二位和第三位互换
#3步骤:move(n-1, b, a, c)程序的意思是,上层move里的第一位和第二位互换
#这里2不是1,所以要进行三步
①:move(1,a,b,c)#上层move的2,3位互换
#打印结果是A--》C
②:打印结果是A--》B
③:move(1,c,a,b)#上层move的1,2位互换
#打印结果是C--》B
2:打印结果是A--》C#提示一下,本层是:move(3,a,b,c)
3:move(2,b,a,c)#上层move的1,2位互换
①:move(1,b,c,a)#上层move的2,3位互换
#打印结果是B--》A
②:打印结果是B--》C
③:move(1,a,b,c)#上层move的1,2位互换
#打印结果是A--》C
AC AB CB AC BA BC AC
举报