汉诺塔c++递归代码
时间: 2024-10-21 12:05:15 浏览: 41
汉诺塔是一个经典的递归问题,它涉及将一堆圆盘从一根柱子移动到另一根柱子,遵守规则:每次只能移动一个圆盘,并且大圆盘不能放在小圆盘之上。以下是使用 C++ 编写的递归实现代码:
```cpp
#include <iostream>
// 定义递归函数,towerOfHanoi
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) { // 当有圆盘时
// 递归地处理前 n - 1 个圆盘
towerOfHanoi(n - 1, from_rod, aux_rod, to_rod);
// 将当前的大圆盘移动到目标位置
std::cout << "Move disk " << n << " from rod " << from_rod << " to rod " << to_rod << "\n";
// 对剩下的 n - 1 个圆盘进行同样的操作,但辅助和目标互换角色
towerOfHanoi(n - 1, aux_rod, to_rod, from_rod);
}
}
int main() {
int numDisks; // 圆盘的数量
std::cout << "Enter the number of disks: ";
std::cin >> numDisks;
// 调用函数,开始汉诺塔游戏,第一个柱子为A,第二个柱子为B,第三个柱子为C
towerOfHanoi(numDisks, 'A', 'C', 'B');
return 0;
}
```
当你运行此程序并输入圆盘的数量时,它会按照汉诺塔的规则打印出移动步骤。
阅读全文