算法基础:汉诺塔--递归
作者:互联网
题目:
古代有一个梵塔,塔内有三个座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