human
编写汉诺塔的算法。
gpt
汉诺塔（Hanoi Tower），又称河内塔，是一个经典的递归问题。

问题描述：有三根柱子，初始时在第一根柱子上有 n 个盘子，大小不一，从上到下由小到大放置。现在要将所有的盘子从第一根柱子移动到第三根柱子上，并且每次只能移动一个盘子，且大盘子不能压在小盘子上。求最少的移动次数，并输出移动的过程。

可以用递归的方法来解决这个问题。解决过程分为三步：

1. 将 n-1 个盘子从第一根柱子移动到第二根柱子（借助第三根柱子）。
2. 将第 n 个盘子从第一根柱子移动到第三根柱子。
3. 将 n-1 个盘子从第二根柱子移动到第三根柱子（借助第一根柱子）。

由此可以写出如下的算法：

``` python
def move(n, source, target, helper):
    # 没有盘子，直接返回
    if n == 0:
        return
    # 将 n-1 个盘子从 source 移动到 helper（利用 target）
    move(n - 1, source, helper, target)
    # 移动第 n 个盘子 from source to target
    print(f'Move disk {n} from {source} to {target}')
    # 将 n-1 个盘子从 helper 移动到 target（利用 source）
    move(n - 1, helper, target, source)

# 用法示例
move(3, 'A', 'C', 'B')
```
这个算法的时间复杂度是 O(2^n)，因为每增加一个盘子，