网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月29日漏签0天
c语言吧 关注:801,675贴子:4,374,528
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回c语言吧
>0< 加载中...

汉诺塔问题 递归调用 (程序只显示盘子的移动顺序)

  • 只看楼主
  • 收藏

  • 回复
  • heyxiaohao
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include <stdio.h>
void hanno(int, int, int, int);
int i = 0;
main()
{
int n = 3; //修改 n 值 可显示任意盘子数
int from = 1, to = 3, middle = 2;
hanno(n, from, middle, to); //从from上借助middle将n个盘子放在to上
printf("总共需要移动 %d 步!\n", i);
}
void hanno(int n, int from, int middle, int to)
{
if(n > 0) {
i++;
hanno(n - 1, from, to, middle); // 从from上借助to将n–1个盘子放在middle上
printf("%d -> %d\n", from, to); // 将n-1剩下的那个盘子放在to上
hanno(n -1, middle, from, to); //从middle上借助from将n - 1个盘子放往to上
}
}


  • heyxiaohao
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
步数计算方法:
汉诺塔移动时,三个盘子要移动7步,这是固定的。当四个盘子时,它先要把最上面的三个盘子移动到另外一根针上(这时移动了7步),然后把第四个盘子移动到另一根针上(这时共移动了8步,三个盘子的7步加上第四个盘子的1步),最后再把那三个盘子移动到第四个盘子上面(又是7步),所以,四个盘子要移动15步。五个盘子也是同样,我们知道了四个盘子的移动步数是15步,那么5个盘子就是15+1+15等于31步。由此得出结论:每增加一个盘子,它的移动步数就增加原来步数的一倍加1。如:我们已经知道5个盘子移动31步,那么,6盘子就是31*2+1=63步。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示