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

有没有大神解释一下每一步是怎么出来的

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C


正在回答

4 回答

首先明确盘子只能从小到大堆放并且只能一个一个的挪动,也就是说每次只能挪动顶部的盘子也就是最小的那个,而现在要将A上的n个盘子移到C上怎么办呢?我们可以用数字1,2,3类比一下

                              A                             B                             C                           

  初始             1  2  3  

A --> C           2   3                                                             1

A --> B           3                                 2

C --> B           3                            1     2

A --> C                                         1     2                         3

B --> A           1                              2                              3

B --> C           1                                                             2    3

A --> C                                                                        1      2      3

这样看起来是不是很复杂呢?其实用递归就很好理解,首先

 move(n-1, a, c, b)
 print a, '-->', c   这两句可以看作把A中的n-1个递归到B中,然后A中的最大数必定最后递归到C中,因此我们把它

手动打印出来  

move(n-1, b, a, c)  最后 我们把B中剩下的n-1个递归到C中完成要求


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

拿三个木块试一下就知道了,一个原则,只能小的在大的上面

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

你这个步骤表示的是有三个圆盘的情况。姑且称之为大中小。显示的过程是,A柱目前的状况时从上到下为小中大。从A柱上把小盘子移动到C柱,再从A柱上把中盘子移动到B柱。然后将C柱上的小盘子移动到B柱的中盘子上去。之后讲A柱上剩下的大盘子移动到C柱上。现在的状况是大盘子在C柱,B柱上由上到下是小盘子,中盘子。然后将B柱上的小盘子移动到A柱上去,将B柱上的中盘子移动到C柱的大盘子上。最后将A柱的小盘子移动到C柱,就完成了。C柱的状况也是从上至下为小中大


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

#-*- coding:utf-8 -*-

# move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到b柱子上面去

def move(n, a, b, c):

# 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归

    if n == 1:  

        print a, '-->', c

        return

# 表示的是将n-1的盘子从a柱子上面移到b柱子上面去

    move(n-1, a, c, b)

# 输出最下面个盘子移从a移到c的路径

    print a, '-->', c

# 将b柱子上面的n-1个盘子移动到c柱子上面

    move(n-1, b, a, c)


move(4, 'A', 'B', 'C')


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

举报

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

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

进入课程

有没有大神解释一下每一步是怎么出来的

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号