汉诺塔问题描述: A、B、C 三个桌子,其中A桌子上放了几个大小不同的盘子,盘子的排列顺序为: 从上到下,依次从小到大递增;现要求把这些盘子从 A 桌子上移动到 C 桌子上,盘子移动时有一点要求:每次移动必须保证三张桌子上大盘子在下、小盘子在上;打印移动次序。
如 A 上一张 盘子时,移动顺序: A -> C
代码实现:
#include <iostream>
using namespace std;
/**
*汉诺塔问题: 将 A 上所有的盘子,移动到 C 上 ,A B C
*/
void moveAC(char A,char C)
{
cout<<A<<"->"<<C<<endl;
}
void recursion_hano(int n,char A,char B,char C)
{
//递归的终止条件
if(n==1)
{
moveAC(A,C);
return;
}
//先将 A 上上边n-1个盘子移动到 B上
recursion_hano(n-1,A,C,B); // 将 上 n-1 个圆盘移动到 B上
moveAC(A,C); //将最大的圆盘移动到 C上
recursion_hano(n-1,B,A,C); //将B上的圆盘移动到C上
}
int main()
{