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

 
 
 
日一二三四五六
       
       
       
       
       
       

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

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

本吧签到人数:0

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

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

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

新人求教 关于汉诺塔递归 算法 谢谢

  • 只看楼主
  • 收藏

  • 回复
  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
void hano(int n,char a,char b,char c)
{
//当盘子个数为奇数个时 第一步 把 1 从 a移到c,
// 当盘子个数是偶数个是 第一步 把 1 从 a移到b,
if(n==1)
printf("\t将%d个盘片从%c移动到%c\n",n,a,c); else{
hano(n-1,a,c,b);
printf("\t将第%d个盘片从%c移动到%c\n",n,a,c);
hano(n-1,b,a,c);
}
}
int main(void)
{
int n;
printf("输入将要移动多少个盘子n:" );
scanf("%d",&n);
printf("递归结果:\n");
hano(n,'A','B','C');
return 0;
}
以上是代码 问题在下面;


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序知道,也知道要把n个盘子从A搬到C上,要搬n-1个,n-2个……1个。递归调用。但是过程不太理解。关于奇数偶数个盘子的问题是这样的,就是你要搬的盘子总数n(输入的数据),当它为奇数和偶数时,搬的第一步不相同,如从A经过B搬到C:(只写出移动的第一步)
当n=1时:
A-->C当n=2时:
A-->B当n=3时:
A-->C当n=4时:
A-->B也就说,当你输入的n为奇数时A-->C,n为偶数时A-->B.求解!


2026-02-06 18:39:19
广告
不感兴趣
开通SVIP免广告
  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
调用不都是一样吗 为什么有差别


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

偶 数个盘子 的 编译结果


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

奇数个盘子 编译结果


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
中午大家都睡觉去了


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
到底是哪个地方出了问题 。 我在草稿本上的函数计算为什么和计算机编译不同 就是奇数和偶数的问题 。抓狂 真心求教呀!!!!!!!!!!


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据 递归 先调用后执行 最先执行 不是 han(1,a,c,b) 吗 这样输出的不就是 “将1从a移到b” 哪错了呢? 难道执行 的是 han(1,a,b,c)吗 那个数是偶数个盘子的输出结果不就也不一样了?


2026-02-06 18:33:19
广告
不感兴趣
开通SVIP免广告
  • 大笨龙001
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个递归应该很好理解吧 假设n个盘子 先将上面的n-1个放到B 在将最底下的一个放到C 最后将B处的n-1个放到C 至于奇数偶数什么的 没看懂楼主想说什么


  • 大笨龙001
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
参数3
hano(3,a,b,c);
hano(2,a,c,b);
hano(1,a,b,c);
输出第一个盘从a到c
输出第二个盘从a到b
后面懒得写了 完全就是照着函数调用的顺序来就是 没什么好说的


  • 333xxxyyywww33
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
当你输入的n为奇数时A-->C,n为偶数时A-->B.求解!
*****************************************
这就是汉诺塔移动的规律呀!
若不如此 将改变目标柱
比如 一个盘 由A 移到 c 完成
你若 由A 移到 B 算完成 就是把中间柱 改为目标柱了


  • 59325462
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
终于弄懂 原因是我把函数调用中的参数 当做了固定值 。其实在函数调用中传的是 a这个变量所接受的值! 谢谢大家的指导!


登录百度账号

扫二维码下载贴吧客户端

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