当前位置: 首页 > news >正文

算法---解决“汉诺塔”问题

# 初始化步骤计数器
i = 1

# 定义移动盘子的函数
def move(n, mfrom, mto):
    global i  # 使用全局变量i来跟踪步骤
    print("第%d步:将%d号盘子从%s->%s" % (i, n, mfrom, mto))  # 打印移动步骤

    i += 1  # 步骤计数器加1

#第一种方法

# 定义汉诺塔问题的递归函数
def honol(n, A, B, C):
    if n == 1:  # 如果只有一个盘子,直接移动到目标柱
        move(1, A, C)
    else:
        honol(n-1, A, C, B)  # 递归地将上面的n-1个盘子从A移动到B
        move(n, A, C)  # 将第n个盘子从A移动到C
        honol(n-1, B, A, C)  # 递归地将B上的n-1个盘子移动到C

try:
    n = int(input("please input a number:"))  # 请求用户输入盘子的数量
    print("移动步骤如下:")  # 提示用户即将显示移动步骤
    honol(n, 'A', 'B', 'C')  # 调用汉诺塔函数,开始移动盘子
except ValueError:  # 如果输入不是整数,则捕获异常
    print("please input a integer n(n>0)!")  # 提示用户输入一个正整数

第二种方法

def hanoi(n,x,y,z):if n == 1:print(x,"-->",z)else:hanoi(n-1,x,z,y)print(x,"-->",y)hanoi(n-1,y,x,z)
while True:n=int(input("请输入汉诺塔的层数:"))hanoi(n,"x","y","z")

输出结果:

第一种方法:

第二种

http://www.lryc.cn/news/485621.html

相关文章:

  • 1-Equity-Transformer:求解NP-Hard Min-Max路由问题的顺序生成算法(AAAI-24)(完)(code)
  • linux001.在Oracle VM VirtualBox中ubuntu虚拟系统扩容
  • RabbitMQ教程:路由(Routing)(四)
  • 华为Ensp模拟器配置RIP路由协议
  • 3. langgraph中的react agent使用 (在react agent添加系统提示)
  • (02)ES6教程——Map、Set、Reflect、Proxy、字符串、数值、对象、数组、函数
  • 【快速解决】kafka崩了,重启之后,想继续消费,怎么做?
  • C++ 的发展
  • RabbitMQ 高级特性——延迟队列
  • ‌EAC(Estimate at Completion)和ETC(Estimate to Complete)
  • 【React】状态管理之Zustand
  • Vue3打包自动生成版本JSON文件,添加系统版本检查,实现系统自动更新提示
  • 海量数据有限内存系列问题解决方案
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,
  • 内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理
  • 麒麟nginx配置
  • 如何在 Ubuntu 上安装 Emby 媒体服务器
  • Mac上详细配置java开发环境和软件(更新中)
  • jmeter常用配置元件介绍总结之定时器
  • Spring——提前编译
  • 乐理的学习(音程)
  • 【网络】数据链路层协议——以太网,ARP协议
  • Linux分区、挂载、配额、逻辑卷、RAID、系统综合状态查看
  • 3D Gaussian Splatting 代码层理解之Part1
  • Qt小知识-Q_GLOBAL_STATIC
  • 【SpringBoot】使用过滤器进行XSS防御
  • 创建vue插件,发布npm
  • 【Android Compose原创组件】可拖动滚动条的完美实现
  • 【模块一】kubernetes容器编排进阶实战之资源管理核心概念
  • 用Python设置PowerPoint幻灯片背景