经典的递归问题:三根相邻的柱子,标号为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时的情况