汉诺塔的递归代码怎么写
时间: 2023-08-31 15:43:04 浏览: 99
### 回答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
```
阅读全文