梵塔问题递归算法c++
时间: 2023-10-18 10:07:52 浏览: 232
梵塔问题(Tower of Hanoi)是一个经典的递归问题,其算法如下:
1. 如果只有一个圆盘,则直接将其从起始柱子移动到目标柱子;
2. 否则,先将前 n-1 个圆盘从起始柱子移动到辅助柱子;
3. 将最后一个圆盘从起始柱子移动到目标柱子;
4. 最后将前 n-1 个圆盘从辅助柱子移动到目标柱子。
以下是 C++ 代码实现:
```c++
#include <iostream>
using namespace std;
void move(int n, char from, char to, char aux) {
if (n == 1) {
cout << "Move disk 1 from " << from << " to " << to << endl;
return;
}
move(n-1, from, aux, to);
cout << "Move disk " << n << " from " << from << " to " << to << endl;
move(n-1, aux, to, from);
}
int main() {
int n = 3;
move(n, 'A', 'C', 'B');
return 0;
}
```
其中,`n` 表示圆盘的数量,`from`、`to`、`aux` 表示起始柱子、目标柱子和辅助柱子的名称。在 `move` 函数中,如果只有一个圆盘,则直接将其从起始柱子移动到目标柱子;否则,先将前 n-1 个圆盘从起始柱子移动到辅助柱子,然后将最后一个圆盘从起始柱子移动到目标柱子,最后将前 n-1 个圆盘从辅助柱子移动到目标柱子。在 `main` 函数中,我们调用 `move` 函数,将 3 个圆盘从起始柱子 A 移动到目标柱子 C。
阅读全文