cpp递归汉诺塔问题。条件:有A,B,C三柱,A柱初始有四个盘 。目的:将A柱所有盘放到C柱上。要求:输出每一步从哪个柱到哪个柱
时间: 2024-11-06 20:20:04 浏览: 22
C语言解决汉诺塔问题教程
在C++中解决汉诺塔(Hanoi Tower)问题是一个经典的递归问题。假设我们有三个柱子A、B和C,开始时A柱上有n个盘子(从大到小排序)。目标是将所有的盘子按照顺序从A移动到C,中间可以借助B柱。每次移动规则是:
1. 将顶部的盘子从源柱移动到辅助柱。
2. 如果源柱还有剩余盘子,将辅助柱上的盘子移到目标柱。
3. 最后,将步骤1中剩下的盘子从辅助柱移动到目标柱。
递归函数`hanoi(int n, char from, char to, char aux)`会按上述规则进行操作:
- 当n=1时,直接从from移动到to,因为只有一个盘子,不需要辅助柱。
- 对于n>1,先递归地将前n-1个盘子从from移动到aux,然后将最大的盘子从from移动到to,最后递归地将n-1个盘子从aux移动到to。
下面是一个简单的示例C++代码实现:
```cpp
#include <iostream>
void hanoi(int n, char from, char to, char aux) {
if (n > 0) {
// Step 1: Move n - 1 disks from 'from' to 'aux'
hanoi(n - 1, from, aux, to);
// Step 2: Move the nth disk from 'from' to 'to'
std::cout << "Move disk " << n << " from " << from << " to " << to << "\n";
// Step 3: Move the n - 1 disks from 'aux' to 'to'
hanoi(n - 1, aux, to, from);
}
}
int main() {
int n = 4; // 使用四个盘子举例
hanoi(n, 'A', 'C', 'B');
return 0;
}
```
运行这个程序,它会输出每一步的操作过程。每个打印语句表示一次移动。
阅读全文