1948 1

汉诺塔递归的函数的参数传递是怎么理解的 [推广有奖]

  • 0关注
  • 0粉丝

本科生

28%

还不是VIP/贵宾

-

威望
0
论坛币
949 个
通用积分
0
学术水平
6 点
热心指数
10 点
信用等级
0 点
经验
673 点
帖子
66
精华
0
在线时间
37 小时
注册时间
2017-4-17
最后登录
2017-12-5

楼主
香蕉菠萝大鸭梨 发表于 2017-9-3 21:00:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
def move(n,a,b,c):
     if n==1:
         print(a,'-->',c)   #如果只有一个,可以直接移动了
else:

         move(n-1,a,c,b)   #先想方设法把最上面的n-1个盘子从a移动到b上 a='a',c='b',b='c'
move(1,a,b,c)     #可以移动最底下的盘子了
move(n-1,b,a,c)   #再想方设法把B上的盘子移到C上
move(3,'a','b','c')
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:汉诺塔 print Move 想方设法 else

沙发
徐博 发表于 2017-9-3 21:03:49
最好是自己玩一次汉诺塔会比较有体验 或者画个草图,你可以先梳理一遍逻辑然后按照逻辑 写程序。主要是递归的思想,第一步先判断是否只有一个盘子,如果是,就直接输出移动路径,如果不是就进入到else里,这里分三步:1.你要想把最后一个盘子从a--->c,就得借助b,什么情况下能直接把最后一个盘子从a-->c,那就是只有一个盘子的时候,所以上面n-1个盘子都得移动到b上面去,根据汉诺塔的规则,大盘不能在小盘上,所以就得借助c盘,就是 move(n-1,a,c,b) 。2.第二步就简单了,把最后一个盘子从a-->c,你可以直接print(a,'--->'c),也可以用递归,move(1,a,b,c) 。3.第三步,把b上面的n-1个盘子,借助a移动到c上,和第一步差不多递归调用move(n-1,b,a,c)。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-17 08:08