汉诺塔问题(递归)

经典的递归问题:三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

#include<iostream>
using namespace std;
/*
* a上的圆盘移动到b上,通过c来辅助 
* n表示圆盘的数量 
*/ 
int Hanoi(int n,char a,char b,char c)
{
	if(n==1)
		cout<<a<<"->"<<b<<endl;
	else
	{
		Hanoi(n-1,a,c,b);//先把a上的n-1个圆盘移动到c上,通过b的辅助
		cout<<a<<"->"<<b<<endl;//把a剩下的最大的一个移动到b上
		Hanoi(n-1,c,b,a);//把c上n-1个移动到b上,通过a的辅助
	}
}
int main()
{
	Hanoi(3,'a','b','c');
	return 0;
}

图为n=3时的情况

汉诺塔问题(递归)_第1张图片


你可能感兴趣的:(汉诺塔问题(递归))