为了账号安全,请及时绑定邮箱和手机立即绑定

具体的输出步骤是怎么来的

这个程序大概看懂了,每一步知道什么意思,但是这个输出结果没看懂,那个A-->B,C-->A,C-->B是怎么来的,有大佬详细分析一下每一步运行得出的结果吗

正在回答

4 回答

兄弟,讲解步骤还是比较麻烦的,每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 

8 回复 有任何疑惑可以回复我~
#1

kuduo 提问者

谢大佬!!我再看看
2019-04-19 回复 有任何疑惑可以回复我~
#2

weixin_慕工程4589350

看完你的讲解感觉更乱了
2019-04-20 回复 有任何疑惑可以回复我~
#3

慕圣4301918 回复 weixin_慕工程4589350

def move(n, a, b, c): if n==1: print a,'-->',c return print a,b,c,n,'------\n' move(n-1,a,c,b) print a,b,c,n,'++++++' print a,'-->',c print a,b,c,n,',,,,,,,' move(n-1,b,a,c) print a,b,c,n+3,'1111111111111\n' move(4, 'A', 'B', 'C') 用这个打印一下,就能明白其中的嵌套了
2019-04-23 回复 有任何疑惑可以回复我~

print

print da


0 回复 有任何疑惑可以回复我~

把我看晕了,绕进去了,出不来了,貌似好复杂的样子

0 回复 有任何疑惑可以回复我~

第一个 move(n-1,a,c,b) 表示的是把上面的n-1块圆盘从 a移动到b然后 再把 a 移动到 c  即 print a--->c第二个move(n-1,b,a,c) 表示把放在b上的n-1个圆盘移动到c上,实现了整个程序而这个 move(4, 'A', 'B', 'C') 表示的是调用这个函数,把参数给传递进去。...

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

具体的输出步骤是怎么来的

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信