标签:移到 递归 -- Hanoi char int 汉诺塔 盘子 移动
题目:
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。
#include <iostream>
using namespace std;
void Hanoi(int n,char src,char mid,char dest)
//将src座上的n个盘子,以mid座为中转,移动到dest座
{
if(n==1){//只需移动一个盘子
cout<<src<<" -> "<<dest<<endl;
return ;
}
//先将n-1个盘子从src移动到mid
Hanoi(n-1,src,dest,mid);
//再将一个盘子从src移动到dest
cout<<src<<" -> "<<dest<<endl;
//最后将n-1个盘子从mid移动到dest
Hanoi(n-1,mid,src,dest);
return ;
}
int main()
{
int n;
cin>>n;
Hanoi(n,'A','B','C');
return 0;
}
分析:
1.只要想到递归思路就很简单了,因为它的做法就是相同的,先把n-1个移到中间 然后把最底下的移到右边,再把n-2个移到左边 再把中间最底下的移到右边 就像套娃一样。
2.最后要把终止条件找出 就是只有一个的时候。
标签:移到,递归,--,Hanoi,char,int,汉诺塔,盘子,移动 来源: https://blog.csdn.net/qq_46470984/article/details/113826704
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。