汉诺塔问题

主要用到递归的思想

问题描述:
假设有3个命名为X、Y、Z的塔座,在塔座上用n个直径大小各不相同、依次到大为1,2…的n个圆盘。
现在要求将X轴上的那个圆盘移至塔座Z上
规则:
1)每次只能移动一个圆盘;
2)圆盘可以插在想,X、Y、Z的任一塔座上;
3)任何时刻都不能将一个较大的圆盘,压在较小的圆盘之上。
实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
void han(int n, char X, char Y, char Z)
{

static int num = 1;
if (n<1)
{
return;
}
else
{
han(n - 1, X, Z, Y);
cout << num++ << "move disk " << n-1 <<" from "<< A << " to " << C << endl;
han(n - 1, Y, X, Z);
}

}

int main()
{

int n;
cin >> n;//输入盘子个数
cout << "n=" << n << endl;
han(n, 'X', 'Y', 'Z');
system("pause");
return 0;

}

文章目录
,