提到汉诺塔(Hanoi Tower),你是否立刻想到那层层叠叠的圆盘和经典的递归算法?没错,这是一款历史悠久的经典问题,而今天,我们用Python探索它的两种解法:递归与非递归!💡
首先,递归版本简单优雅,就像一只灵巧的小鸟,代码行数虽少,却能清晰地展现问题的本质👇
```python
def hanoi(n, src, dst, aux):
if n == 1:
print(f"Move disk 1 from {src} to {dst}")
return
hanoi(n-1, src, aux, dst)
print(f"Move disk {n} from {src} to {dst}")
hanoi(n-1, aux, dst, src)
```
但递归虽美,有时也显得笨重。这时,非递归解法登场啦!它像一位沉稳的智者,通过模拟栈的操作,将问题的每一步记录得明明白白👇
```python
def iter_hanoi(n):
stack = [(False, n, 'A', 'C', 'B')]
while stack:
finished, count, src, dst, aux = stack.pop()
if finished:
print(f"Move disk {count} from {src} to {dst}")
elif count == 1:
print(f"Move disk 1 from {src} to {dst}")
else:
stack.append((True, count, src, dst, aux))
stack.append((False, count-1, src, aux, dst))
stack.append((False, 1, src, dst, aux))
stack.append((False, count-1, aux, dst, src))
```
无论是递归还是非递归,汉诺塔都教会我们:复杂的问题也能化繁为简!🌈💪
Python 汉诺塔 算法优化 递归与非递归