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

汉诺塔问题

为什么下一步就变成move(n-1,a,c,b)了,n-1能理解,a,c,b是为什么??

正在回答

3 回答

这一步描述的是过渡环节。表示把n-1个盘子从a通过b移动到c。

只有这样才能把a上最大的一个盘子移动到c。

下一步是print a,'-->',c。就表示,把剩下的最大的盘子从a移动到c。

最后一步move(n-1, b, a, c)。表示,把之前移动到b上的n-1个盘子通过a移动到c。

完成递归

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

def mov(n, a, b, c):  #定义函数n为圆盘数量, a为A柱子,b为B柱子,c为C柱子
    if n ==1:              #判断圆盘数量是否等于1
        print a, '-->', c #如果等于,输出函数    A柱子---c柱子
        return              #跳过当前函数#
    mov(n-1, a, c, b)  #圆盘数量减1,   将柱子换位置(我是这么理解的)
    print a, '-->', c     #输出函数   A柱子-----B柱子 看c在第二位相当于定义函数里面的B
    mov(n-1, b, a, c)  #圆盘数量减1,  将柱子换位置  这个时候如果输出a----c 实际显示出来的是B-----C

                                                           a在2号位   c在3号位



mov(4, 'A', 'B', 'C')   #运行这个 圆盘数量为4   对应柱子标号a=A  b=B  c=C的函数


输出结果为

A --> B          
A --> C
B --> C
A --> B
C --> A
C --> B
A --> B
A --> C
B --> C
B --> A
C --> A
B --> C
A --> B
A --> C
B --> C

运行步骤

  1. 执行刚定义的函数其参数====mov(4, 'A', 'B', 'C'  注意:这个函数里面n=4   a=A   b=B  c=C

  2. 按照函数的步骤 判断n==1 此处不等于则 跳出函数

  3. 运行函数mov(n-1, a, c, b) 

  4. .。。。。。。。。。。。。。。。。。。

 






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

这个事情你抽象一下想就可以了。 首先move(n, a, b, c)是表示把A柱的n个碟子通过B柱移动到C柱。那如果让你来做这个事情,你肯定希望有人帮你把n-1个碟子先移动到B柱,你直接把最后一个碟子移动到C柱子,然后再请人帮忙把B柱的碟子移动到C柱。  acb就是请人帮你把碟子通过C柱移动到B柱的过程

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

举报

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

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

进入课程

汉诺塔问题

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