假设现在有a 、b 、c 三个柱子,现在要把n个盘子从a移动到c,用递归来做,具体步骤如下。
把a上面n-1个盘子看做一个整体,这样a上面就剩下两个盘子了,(n,n-1)
1、把n-1个整体借助于c先移动到c
2、把第n个移动到c
3、把b上面的n-1个盘子借助于a移动到c
代码实现如下:
#include <iostream>
using namespace std;
void hanoi(int n, char a, char b, char c)
{
/* 如果剩下一个盘子,直接从a-->c */
if(1 == n)
{
cout << n << ":" << a << "-->" << c << endl;
}
else
{
/* 把n-1个盘子从a移动到b借助于c */
hanoi(n-1,a,c,b);
/* 把第n和盘子从a移动c */
cout << n << ":" << a << "-->" << c << endl;
/* 把n-1个盘子从b移动到c借助于a */
hanoi(n-1,b,a,c);
}
}
int main()
{
int num = 0;
cin >> num;
hanoi(num,'a','b','c');
return 0;
}