| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 497 人关注过本帖
标题:汉诺塔问题
只看楼主 加入收藏
q2121588
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2010-1-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
汉诺塔问题
1 #include "stdio.h"
2 main()
 3 {void hanoi(int,char,char,char);
 4 int m;
 5 printf("input the number of disks:");
 6 scanf("%d",&m);
7 printf("The step to moving %d disks:\n",m);
 8 hanoi(m,'A','B','C');
 9 }
 10 void hanoi(int n,char a,char b,char c)
11 {//void move(char,char);
 12 if(n==1) move(a,c);
 13 else
14 {hanoi(n-1,a,c,b);
 15 move(a,c);------------------这一上的都能理解
 16 hanoi(n-1,b,a,c); ——————————————————————这一步执行的话每一次递归又要执行第14.15步,该怎么理解
17 }
 18 }
 19 void move(char x,char y)
20 {printf("%c-->%c\n",x,y);
 21 }
搜索更多相关主题的帖子: 汉诺塔 
2010-02-09 17:46
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:10 
把整座塔从A移动到C只需在满足规则的情况下,把最底下的盘子从A移动到C;
把最底下的盘子从A移动到C,又分两种情况:
一、只有一个盘子,这种情况下直接将盘子从A移动到C
二、有n个盘子,这种情况下分三步: 1  hanoi(n-1,a,c,b); //把上面n - 1个盘子从A移动到C
                                  2  move(a,c);//把最下面的盘子从A移动到C
                                  3   hanoi(n-1,b,a,c);//把B中的n-1个盘子从B移动到C
个人觉得递归问题有时候看整体会好理解些
2010-02-09 18:23
shinobifc
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2008-7-31
收藏
得分:10 
楼上正解,只不过有个小错误:1.hanoi(n-1,a,c,b); //把上面n - 1个盘子从A移动到B哦。建议楼主看看谭的C书,第八章讲到函数时就举了汉诺塔的例子。整体看会容易些,不要想太多的每个具体步骤。无非就是如果有N个,那么N-1个是借助一个C由A到B,最大的直接由A到C,再把B中的N-1个借助A由B都C,就OK了。一开始,以一个、两个、三个的例子看看,逻辑正确了,就通了。
2010-02-09 19:33
快速回复:汉诺塔问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029497 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved