编写程序解决汉诺塔问题:有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个盘子(编号从n至1,即最下面盘子编号为n,最上面盘子编号为1)。目标:把A杆上的盘子全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
时间: 2023-06-12 14:08:27 浏览: 98
汉诺塔问题的简单程序
以下是一个递归实现的 Python 程序解决汉诺塔问题:
```python
def hanoi(n, start, end, mid):
if n == 1:
print(f"Move disk {n} from {start} to {end}")
else:
hanoi(n-1, start, mid, end)
print(f"Move disk {n} from {start} to {end}")
hanoi(n-1, mid, end, start)
# 测试
hanoi(3, "A", "C", "B")
```
输出结果为:
```
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
```
解释一下代码的实现过程:
定义一个递归函数 `hanoi(n, start, end, mid)`,其中 `n` 表示要移动的盘子数目,`start`、`end`、`mid` 分别表示起始杆、目标杆、中转杆。当 `n==1` 时,只需将最后一个盘子从起始杆移动到目标杆即可;否则,需要先将前 `n-1` 个盘子从起始杆经过中转杆移动到目标杆,再将第 `n` 个盘子从起始杆移动到目标杆,最后再将前 `n-1` 个盘子从中转杆经过起始杆移动到目标杆。
阅读全文