N 个圆盘按照半径从小到大依次迭放在一个柱子上(小的在上面, 1 1 号柱子)。 现在要求将 N 个盘子从 1 1 号柱移到 3 3 号柱上,提供 2 2 号柱子作为临时柱,每次只允许移一个盘子,整个过程不允许大盘在小盘上面c++
时间: 2024-01-22 07:20:18 浏览: 88
这是一个经典的递归问题,可以使用递归算法来解决。
假设有 n 个盘子需要从 1 号柱子移动到 3 号柱子,可以按照以下步骤进行:
1. 将 n-1 个盘子从 1 号柱子移动到 2 号柱子,使用 3 号柱子作为临时柱。
2. 将第 n 个盘子从 1 号柱子移动到 3 号柱子。
3. 将 n-1 个盘子从 2 号柱子移动到 3 号柱子,使用 1 号柱子作为临时柱。
递归的结束条件是只有一个盘子需要移动,此时直接将盘子从 1 号柱子移动到 3 号柱子即可。
下面是该问题的递归实现代码:
```c++
void move(int n, int from, int to, int temp) {
if (n == 1) {
cout << "Move disk " << n << " from " << from << " to " << to << endl;
} else {
move(n-1, from, temp, to);
cout << "Move disk " << n << " from " << from << " to " << to << endl;
move(n-1, temp, to, from);
}
}
```
其中,n 表示需要移动的盘子数量,from、to、temp 分别表示三个柱子的编号。
阅读全文