有3根柱子:A,B,C,A柱子上有3个盘子,从上到下依次增 大。要将A柱上的所有的盘子移动到C柱上,每次只移动一个盘子整个过程都必须满足每一根柱子上的盘子从上到下依次增大。这需要多少次移动?请通过递推算法计算移动次数。用c++初学者语言写出来
时间: 2024-03-22 22:39:04 浏览: 29
这是一个经典的汉诺塔问题,可以使用递归算法来解决。具体算法可参考以下代码:
```c++
#include <iostream>
using namespace std;
int hanoi(int n, char a, char b, char c) {
if (n == 1) { // 只有一个盘子需要移动
cout << "Move disk " << n << " from " << a << " to " << c << endl;
return 1;
} else { // 多个盘子需要移动
int count = 0;
count += hanoi(n-1, a, c, b); // 将n-1个盘子从A移动到B
cout << "Move disk " << n << " from " << a << " to " << c << endl; // 将第n个盘子从A移动到C
count++;
count += hanoi(n-1, b, a, c); // 将n-1个盘子从B移动到C
return count;
}
}
int main() {
int n = 3; // 盘子数量
int count = hanoi(n, 'A', 'B', 'C');
cout << "Total moves: " << count << endl;
return 0;
}
```
输出结果为:
```
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
Total moves: 7
```
因为n=3时,需要移动7次才能完成。
阅读全文