如果要使用递归函数实现汉诺塔,我们可以按照以下步骤进行:
- 定义递归函数
首先,我们需要定义一个递归函数来实现汉诺塔的移动操作。此函数需要包含如下参数:
- n:表示要移动的盘子数量;
- p1:表示第一个柱子,即起始柱子;
- p2:表示第二个柱子,即中间柱子;
- p3:表示第三个柱子,即目标柱子。
def hanoi(n, p1, p2, p3):
- 终止条件
在递归函数中,我们需要设置终止条件。当只有一个盘子时,我们只需要将它从起始柱子移动到目标柱子即可。
if n == 1:
print(p1, '->', p3)
return
- 递归调用
当n大于1时,我们需要将第1到n-1个盘子从起始柱子移动到中间柱子。此时,目标柱子作为辅助柱子。然后,我们将第n个盘子从起始柱子移动到目标柱子。最后,我们需要将第1到n-1个盘子从中间柱子移动到目标柱子。此时,起始柱子作为辅助柱子。
hanoi(n-1, p1, p3, p2)
print(p1, '->', p3)
hanoi(n-1, p2, p1, p3)
- 完整代码
以下是完整的用递归函数实现汉诺塔的代码:
def hanoi(n, p1, p2, p3):
if n == 1:
print(p1, '->', p3)
return
hanoi(n-1, p1, p3, p2)
print(p1, '->', p3)
hanoi(n-1, p2, p1, p3)
hanoi(3, 'A', 'B', 'C')
在这个代码中,我们将3个盘子从起始柱子'A'移动到目标柱子'C'上。运行结果如下:
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
可以看出,程序成功地将3个盘子从'A'柱子上移动到了'C'柱子上。
我们也可以尝试将更多的盘子从起始柱子移动到目标柱子上。如下代码将移动4个盘子:
hanoi(4, 'A', 'B', 'C')
输出结果如下:
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言用递归函数实现汉诺塔 - Python技术站