编程语言
首页 > 编程语言> > 算法基础:汉诺塔--递归

算法基础:汉诺塔--递归

作者:互联网

题目:
古代有一个梵塔,塔内有三个座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