Python汉诺塔问题。问题描述: 有n个盘子在A处, 盘子从大到小排列,最上面的盘子最小。现在要把这n个盘子从A处搬到C处,可以在B处暂存,但任何时候都不能出现大盘子压在小盘子上面的情况。
时间: 2024-10-02 21:04:28 浏览: 24
汉诺塔问题是一个经典的递归问题 在这个问题中,我们有三个塔座(通常被称为A、B和C),并且我们有一堆大小不同的盘子,每个盘子都可
Python汉诺塔问题是一个经典的递归问题,源于一个古老的印度谜题。它的基本规则是将n个盘子从柱子A移动到柱子C,过程中只能每次移动一个盘子,并且始终遵守大盘子不能放在小盘子之上的规则。解决这个问题通常采用递归策略,可以分为三个步骤:
1. 将最上面的n-1个盘子从A移动到B,此时A上只剩下一个大盘子。
2. 将剩余的大盘子直接从A移动到C。
3. 最后,将之前移动到B的n-1个盘子再从B移动到C,按照同样的方式放置在大盘子之上。
递归的核心在于处理n-1个盘子的问题,每次递归都是对原问题规模的缩小。这个过程可以用Python代码简洁地表示:
```python
def hanoi(n, source, auxiliary, target):
if n > 0:
# Step 1: Move n-1 disks from source to auxiliary
hanoi(n-1, source, target, auxiliary)
# Step 2: Move the nth disk directly to target
print(f"Move disk {n} from {source} to {target}")
# Step 3: Move n-1 disks from auxiliary to target
hanoi(n-1, auxiliary, source, target)
hanoi(n, 'A', 'B', 'C')
```
阅读全文