c++汉诺塔问题递归算法
时间: 2023-10-18 10:20:00 浏览: 107
C++递归算法(汉诺塔问题)
汉诺塔问题是经典的递归算法问题,其解法如下:
假设有三个柱子,分别为 A、B、C,A 柱子上有 n 个盘子,盘子大小不一,大的在下,小的在上,现在要将这 n 个盘子从 A 移动到 C,且每次只能移动一个盘子,并且大盘子不能放在小盘子上面。
递归解法如下:
1. 如果只有一个盘子需要移动,则直接将其从 A 移动到 C。
2. 如果有 n 个盘子需要移动,则将其分成两个部分:
- 第一部分:将 A 上的前 n - 1 个盘子通过 C 移动到 B(此时需要借助 C 柱子)。
- 第二部分:将 A 上的第 n 个盘子移动到 C。
- 第三部分:将 B 上的 n - 1 个盘子通过 A 移动到 C(此时需要借助 A 柱子)。
递归代码如下:
```c++
void hanoi(int n, char A, char B, char C)
{
if (n == 1) {
cout << "Move disk " << n << " from " << A << " to " << C << endl;
return;
}
hanoi(n - 1, A, C, B);
cout << "Move disk " << n << " from " << A << " to " << C << endl;
hanoi(n - 1, B, A, C);
}
```
其中,n 表示盘子的个数,A、B、C 分别表示三个柱子的名称。```hanoi(n, 'A', 'B', 'C')``` 即可输出移动的过程。
阅读全文