Python——编写函数实现汉诺塔

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 利用递归函数移动汉诺塔:
def move(n, a, b, c):
    if n == 1:
        print('move', a, '-->', c)
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)

print(move(4, 'A', 'B', 'C'))

 

F:\pycharmFiles>python helloword.py
move A --> B
move A --> C
move B --> C
move A --> B
move C --> A
move C --> B
move A --> B
move A --> C
move B --> C
move B --> A
move C --> A
move B --> C
move A --> B
move A --> C
move B --> C
 

### 汉诺塔算法的实现 汉诺塔是一个经典的递归问题,其核心思想在于通过分解复杂问题为简单子问题来解决。以下是三种常见编程语言(JavaScript、Java 和 Python)中实现汉诺塔算法的具体方式。 #### JavaScript 实现 在 JavaScript 中,可以通过定义一个函数 `hanoi` 来模拟汉诺塔的过程。该函数接收四个参数:盘子数量 (`height`)、起始柱子 (`fromPole`)、目标柱子 (`toPole`) 和辅助柱子 (`auxiliaryPole`)。具体代码如下: ```javascript function hanoi(height, fromPole, toPole, auxiliaryPole) { if (height >= 1) { // 将 height-1 个盘子从起点移到中间柱子 hanoi(height - 1, fromPole, auxiliaryPole, toPole); // 移动最底下的盘子到目标柱子 console.log(`Move disk ${height} from pole ${fromPole} to pole ${toPole}`); // 将剩下的高度为 height-1 的塔从中间柱子移到目标柱子 hanoi(height - 1, auxiliaryPole, toPole, fromPole); } } // 调用示例 hanoi(3, 'A', 'C', 'B'); // A 是源柱,C 是目标柱,B 是辅助柱 ``` 此代码实现了基本逻辑并展示了每一步的操作[^1]。 #### Java 实现 对于 Java 编程语言而言,可以创建静态方法完成相同功能。下面展示了一个完整的类结构以及调用入口: ```java public class HanoiTower { public static void moveDisks(int n, char source, char dest, char aux){ if(n == 1){ System.out.println("Move Disk "+n+" From Pole "+source+" To Pole "+dest); }else{ moveDisks(n-1, source, aux, dest); System.out.println("Move Disk "+n+" From Pole "+source+" To Pole "+dest); moveDisks(n-1, aux, dest, source); } } public static void main(String[] args){ int numberOfDiscs = 3; moveDisks(numberOfDiscs,'A','C','B'); } } ``` 这里采用的是标准控制台输出形式,并且按照传统命名约定指定了各变量名[^2]。 #### Python 实现 Python 提供了一种简洁优雅的方式来表达这种递归关系。同样地,我们只需要编写一个小巧的功能模块即可满足需求: ```python def hanoi(n, src='A', dst='C', tmp='B'): if n == 1: print(f"Move disk 1 from {src} -> {dst}") else: hanoi(n-1, src, tmp, dst) print(f"Move disk {n} from {src} -> {dst}") hanoi(n-1, tmp, dst, src) # 测试运行 if __name__ == "__main__": number_of_disks = 3 hanoi(number_of_disks) ``` 这段脚本清晰明了地表达了整个流程,并利用字符串插值特性增强了可读性[^3]。 --- ### 总结 以上分别介绍了如何使用 JavaScript、Java 及 Python 这些主流开发工具去构建汉诺塔解决方案。无论哪种技术栈下,都遵循着相同的解题策略——递归分治法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值