写出汉诺塔递归 用python
时间: 2023-05-30 19:03:05 浏览: 135
汉诺塔问题是一种经典的递归问题,可以用Python实现。以下是汉诺塔递归的Python代码示例:
```python
def hanoi(n, A, B, C):
if n == 1:
print(A, "->", C)
else:
hanoi(n-1, A, C, B)
print(A, "->", C)
hanoi(n-1, B, A, C)
# 示例
hanoi(3, "A", "B", "C")
```
上述代码中,hanoi函数接收四个参数:n表示盘子的数量,A、B、C分别表示三个柱子。当n等于1时,直接将A柱子上的盘子移动到C柱子上。当n大于1时,首先将n-1个盘子从A柱子移动到B柱子上,然后将A柱子上的最后一个盘子移到C柱子上,最后将B柱子上的n-1个盘子移动到C柱子上。递归过程中,每次调用hanoi函数都相当于解决一个规模更小的汉诺塔问题。
相关问题
请用Python写出并解释汉诺塔的递归代码
当然可以,下面是用Python实现汉诺塔问题的递归算法:
```python
def hanoi(n, A, B, C):
if n > 0:
# 将n-1个盘子从A通过C移到B
hanoi(n-1, A, C, B)
# 将最后一个盘子从A移到C
print("Move disk", n, "from", A, "to", C)
# 将n-1个盘子从B通过A移到C
hanoi(n-1, B, A, C)
# 测试代码
hanoi(3, "A", "B", "C")
```
这里的 `n` 表示盘子的数量,`A`、`B`、`C` 分别表示 3 个柱子,其中 `A` 为源柱子,`B` 为辅助柱子,`C` 为目标柱子。
当 `n` 等于 0 时,结束递归,否则将 `n-1` 个盘子从 `A` 通过 `C` 移到 `B`,再将最后一个盘子从 `A` 移动到 `C`,最后将 `B` 上的 `n-1` 个盘子通过 `A` 移动到 `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
```
输出结果表示,将 3 个盘子从 `A` 移到 `C` 需要的步骤顺序是:
1. 将最上面的盘子从 `A` 移动到 `C`
2. 将次上面的盘子从 `A` 移动到 `B`
3. 将最上面的盘子从 `C` 移动到 `B`
4. 将最下面的盘子从 `A` 移动到 `C`
5. 将最上面的盘子从 `B` 移动到 `A`
6. 将次上面的盘子从 `B` 移动到 `C`
7. 将最上面的盘子从 `A` 移动到 `C`
以上就是递归实现汉诺塔问题的Python代码,希望能够帮助到你。
汉诺塔的递归代码怎么写
### 回答1:
汉诺塔的递归代码的实现很简单,可以用以下代码实现:
def hanoi(n, a, b, c):
if n == 1:
print('从', a, '移动', n, '号盘子到', c)
else:
hanoi(n-1, a, c, b)
print('从', a, '移动', n, '号盘子到', c)
hanoi(n-1, b, a, c)
hanoi(3, 'A', 'B', 'C')
### 回答2:
汉诺塔是一个经典的递归问题,其代码如下:
def hanoi(n, A, B, C):
if n == 1:
print("将第", n, "个盘子从", A, "移动到", C)
return
hanoi(n-1, A, C, B) # 将 n-1 个盘子从 A 借助 C 移动到 B
print("将第", n, "个盘子从", A, "移动到", C)
hanoi(n-1, B, A, C) # 将 n-1 个盘子从 B 借助 A 移动到 C
其中,n 表示盘子的数量,A、B、C 表示三个柱子,起始时所有的盘子都在 A 上,目标是将所有的盘子移动到 C 上。
首先,判断如果只有一个盘子(n == 1),直接将这个盘子从 A 移动到 C,并返回。
如果有多个盘子,则先将 n-1 个盘子从 A 借助 C 移动到 B,即先将上面的 n-1 个盘子放到 B 上。然后将第 n 个盘子直接从 A 移动到 C。最后再将 n-1 个盘子从 B 借助 A 移动到 C,即将之前放在 B 上的 n-1 个盘子移动到 C 上。
通过以上递归过程,我们可以将任意数量的盘子从 A 移动到 C,符合汉诺塔的规则。
### 回答3:
汉诺塔是一个经典的递归问题,其代码如下:
```python
def hanoi(n, source, target, auxiliary):
if n > 0:
# 将n-1个盘子从源柱移动到辅助柱
hanoi(n - 1, source, auxiliary, target)
# 将第n号盘子从源柱移动到目标柱
print("Move disk", n, "from", source, "to", target)
# 将n-1个盘子从辅助柱移动到目标柱
hanoi(n - 1, auxiliary, target, source)
# 测试示例
hanoi(3, "A", "C", "B")
```
在上述代码中,`hanoi`函数使用了四个参数:`n`表示盘子的数量,`source`表示起始柱子,`target`表示目标柱子,`auxiliary`表示辅助柱子。
首先,判断如果盘子数量大于0,则执行递归调用。其中,第一个递归调用将n-1个盘子从起始柱移动到辅助柱,第二个递归调用将n-1个盘子从辅助柱移动到目标柱。这样,就完成了将n个盘子从起始柱移动到目标柱的操作。
接着,在每一次递归调用中,打印出移动盘子的动作,即将第n号盘子从起始柱移动到目标柱。
最后,我们可以通过调用`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
```
阅读全文