具体的输出步骤是怎么来的
这个程序大概看懂了,每一步知道什么意思,但是这个输出结果没看懂,那个A-->B,C-->A,C-->B是怎么来的,有大佬详细分析一下每一步运行得出的结果吗
这个程序大概看懂了,每一步知道什么意思,但是这个输出结果没看懂,那个A-->B,C-->A,C-->B是怎么来的,有大佬详细分析一下每一步运行得出的结果吗
2019-04-17
兄弟,讲解步骤还是比较麻烦的,每n层,就需要有2^n-1次步骤,4层就有15步
所以简单讲解一下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
举报