汉诺塔游戏问题。若要将n个盘子(n<=10),从a柱搬往c柱,可以用b柱做过渡,每次只能移动一个盘子,且保持从大到小的顺序。使用递归方法,输出搬动步骤
时间: 2023-04-21 17:00:04 浏览: 194
汉诺塔游戏是一个经典的递归问题。要将n个盘子从a柱搬往c柱,可以用b柱做过渡,每次只能移动一个盘子,且保持从大到小的顺序。递归方法可以解决这个问题,具体步骤如下:
1. 当n=1时,直接将盘子从a柱移动到c柱。
2. 当n>1时,先将n-1个盘子从a柱移动到b柱,再将最后一个盘子从a柱移动到c柱,最后将n-1个盘子从b柱移动到c柱。
具体的搬动步骤可以用递归函数来实现,代码如下:
```
void hanoi(int n, char a, char b, char c) {
if (n == 1) {
cout << "Move disk " << n << " from " << a << " to " << c << endl;
} else {
hanoi(n-1, a, c, b);
cout << "Move disk " << n << " from " << a << " to " << c << endl;
hanoi(n-1, b, a, c);
}
}
```
其中,n表示盘子的数量,a、b、c分别表示三个柱子的名称。调用hanoi函数即可输出搬动步骤,例如:
```
hanoi(3, 'A', 'B', 'C');
```
输出结果为:
```
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
```