问题分析(递归)(盘子一次为x , y , z)
当n !=1时:
1、将x上的前n-1个盘子借助z搬到y上
2、将x上的第n个盘子搬到z上
3、将y上的n-1个盘子借助x搬到z上
当n==1时:
将x上的盘子搬到z上
#include <iostream>
using namespace std;
int i = 1;
void move(int n, char x, char y, char z)
{
if (1 == n)
{
cout << i << "." << x << "-->" << z << endl;
i++;
}
else
{
move(n - 1, x, z, y); //将 n-1 个盘子从 x 借助 y 移动到 z
cout << i <<"." << x << "-->" << z << endl; //将第 n 个盘子从 x 移动到 z上
i++;
move(n - 1, y, x, z); //将 n-1 个盘子从 y 借助 x 移动到 z
}
}
int main()
{
cout << "请输入汉诺塔的层数:";
int n;
cin >> n;
cout << "移动路径如下:\n";
move(n, 'x', 'y', 'z');
system("pause");
return 0;
}