python汉诺塔问题递归
时间: 2023-09-13 11:07:39 浏览: 104
汉诺塔问题是一个经典的递归问题,其解法如下:
假设有三个柱子,分别为 A、B、C,有 n 个大小不同的圆盘,初始时所有圆盘都放在柱子 A 上,且按照从大到小的顺序从下往上依次摆放。现在需要将所有圆盘移动到柱子 C 上,移动时需要遵守以下规则:
1. 每次只能移动一个圆盘;
2. 圆盘可以放在空柱子上,也可以放在比它大的圆盘上面;
3. 不能把较大的圆盘放在较小的圆盘上面。
递归解法如下:
1. 当只有一个圆盘时,直接将其从 A 移动到 C 即可;
2. 当有 n 个圆盘时,将其分为两个部分:最下面的一个盘子和上面的 n-1 个盘子;
3. 将上面的 n-1 个盘子从 A 移动到 B(此时 C 作为辅助柱子);
4. 将最下面的一个盘子从 A 移动到 C;
5. 将 B 上的 n-1 个盘子移动到 C(此时 A 作为辅助柱子)。
下面是 Python 代码实现:
```python
def hanoi(n, A, B, C):
if n == 1:
print('Move disk', n, 'from', A, 'to', C)
else:
hanoi(n-1, A, C, B)
print('Move disk', n, 'from', A, 'to', C)
hanoi(n-1, B, A, C)
# 测试
hanoi(3, 'A', 'B', 'C')
```
输出结果为:
```
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
```
阅读全文