C++汉诺塔问题。

代码如下:#include<iostream>usingnamespacestd;intmain(){voidhanoi(intn,charone,chartwo,cha... 代码如下:
#include<iostream>
using namespace std;
int main()
{
void hanoi(int n,char one,char two,char three);
int m;
cout<<"input the number of diskes:";
cin>>m;
cout<<"The step to moving"<<m<<"diskes:"<<endl;
hanoi(m,'A','B','C');
return 0;
}

void hanoi(int n,char one,char two ,char three)
{
void move(char x,char y);
if(n==1) move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

void move(char x,char y)
{
cout<<x<<"--->"<<y<<endl;
}

求大神详细解释一下里面的 void hanoi()这个函数的步骤以及分析一下这个函数,越详细越好 谢谢了!!^ ^
展开
 我来答
bsR弧度的微笑
推荐于2017-11-26 · TA获得超过182个赞
知道答主
回答量:112
采纳率:0%
帮助的人:122万
展开全部
哈哈 很简单的:我说下递归的理解方法(拿你说的汉诺塔做例子),简单的话给我加分哦 ~亲
首先:对于递归这一类函数,你不要纠结于他是干什么的,只要知道他的一个模糊功能是什么就行,等于把他想象成一个能实现某项功能的黑盒子,而不去管它的内部操作先,好,我们来看下汉诺塔是怎么样解决的。(借用一下楼下的代码 呵呵)
首先按我上面说的把递归函数想象成某个功能的黑盒子,void hanoi(int n,char one,char two,char three); 这个递归函数的功能是:能将n个由小到大放置的小长方形从one 位置,经过two位置 移动到three位置。那么你的主程序要解决的问题是要将m个的"汉诺块"由A借助B移动到C,根据我们上面说的汉诺塔的功能,我相信傻子也知道在主函数中写道:hanoi(m,A,B,C)就能实现将m个块由A借助B码放到C,对吧?所以,看楼下的主程里面有hanoi(m,'A','C','B');这个调用。
接下来我们看看要实现hannoi的这个功能,hannoi函数应该干些什么?
在hannoi函数里有这么三行
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
同样以黑盒子的思想看待他,要想把n个块由A经过B搬到C去,是不是可以分为上面三步呢?
这三部是:第一步将除了最后最长的那一块以外的n-1块由one位置经由three搬到two 也就是从A由C搬到B 然后把最下面最长那一块用move函数把他从A直接搬到C 完事后 第三步再次将刚刚的n-1块借助hannoi函数的功能从B由A搬回到C 这样的三步实习了n块由A经过B到C这样一个功能,同样你不用纠结于hanoi函数到底如何实现这个功能的,只要知道他有这么一个神奇的功能就行
最后:递归都有收尾的时候对吧,收尾就是当只有一块的时候汉诺塔怎么个玩法呢?很简单吧,直接把那一块有Amove到C我们就完成了,所以hanoni这个函数最后还要加上 if(n==1)move(one,three);(当只有一块时,直接有Amove到C位置就行)这么一个条件就能实现hanoin函数n>=1时将n个块由A经由B搬到C的完整功能了。
递归这个复杂的思想就是这样简单解决的,呵呵 不知道你看懂没?纯手打,希望能帮你理解递归
总结起来就是不要管递归的具体实现细节步骤,只要知道他的功能是什么,然后利用他自己的功能通过调用他自己去解决自己的功能(好绕口啊,日)最后加上一个极限情况的条件即可,比如上面说的1个的情况。
追问
能具体表现下吗比如4块汉诺塔,5块汉诺塔这么说一下,空间思维太差了我
你看比如说2块的时候,其实n-1块是直接放到第二块的位置,而n块释放到第三块的位置,然后再把第n-1块放到第三块的位置,貌似和上面的理解不同
巧豚豚
2024-12-24 广告
Woot目前在中国区的总代理是巧豚豚。通过巧豚豚,卖家可以更方便地提交活动并参与Woot的促销活动。巧豚豚作为官方代理,能够为卖家提供专业、合规且安全的站内外引流促销方案,帮助卖家在Woot平台上进行有效的推广和销售。巧豚豚是WOOT业务团... 点击进入详情页
本回答由巧豚豚提供
九华闫女
2019-05-19 · TA获得超过3722个赞
知道大有可为答主
回答量:3085
采纳率:25%
帮助的人:207万
展开全部
递归解决,算是经典了,几乎任何一本写算法的教材中都有!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式