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

这个汉诺塔算法,感觉有点没懂,有疑问求解答!

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

  2.     if n==1:

  3.         print a,'-->',c

  4.         return

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

  6.     print a,'-->',c

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

  8. move(3, 'A', 'B', 'C')

第六行的print看不懂。。还有第七行也没明白,没有print了吗,代码在哪里递归的呢

正在回答

2 回答

n=1的时候就不用解释了吧。主要是以下三步:

move(n-1,a,c,b)
print a, '-->', c
move(n-1,b,a,c)

1、当n>1时,需要把“a”柱除最底端圆盘的所有(n-1个)移动到“b”柱,move(n-1,a,c,b)

2、然后把“a”柱剩下的最底端圆盘(即最大圆盘)移动到“c”柱,print a, '-->', c

3、最后把第一步移动到“b”柱的所有圆盘移动到“c”柱,move(n-1,b,a,c)

逻辑就是把n-1个圆盘先移动到过渡位置,最大的移动到目标位置后,再把过渡位置的n-1个圆盘移动到目标位置。剩下的任务就是程序自动递归循环。


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

move(n,a,b,c)这个函数可以理解为,把n从a借助b,移到c的柱子上,

那么需要就是先处理上面的n-1层,那么第五行的作用就是把n-1行,从a借助c转移到b柱子上,然后输出方法,此时n层上面是空的了,然后把n层从a柱子移到c柱子就完成了,然后再开始move(n-1,b,a,c),重复上述过程

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

举报

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

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

进入课程

这个汉诺塔算法,感觉有点没懂,有疑问求解答!

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