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

马鞍山网站建设公中淼建设工程有限公司网站

马鞍山网站建设公,中淼建设工程有限公司网站,站长工具排名分析,室内装饰设计培训机构🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 分析 2.1 图解 2.2 代码解析 3. 完整代码 3.1 运行截图 4. 小结 1. 题目 汉诺塔问题是一个经典的递归问题,源自一个古老的印度传…

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

目录

 1. 题目

2. 分析

2.1 图解

2.2 代码解析

3. 完整代码

 3.1 运行截图

4. 小结


 1. 题目

汉诺塔问题是一个经典的递归问题,源自一个古老的印度传说。在这个问题中,我们有三根柱子和一系列不同大小的圆盘,这些圆盘最初按大小顺序堆叠在一根柱子上。目标是将所有圆盘移动到另一根柱子上,遵循两个规则:一次只能移动一个圆盘,且在移动过程中较大的圆盘不能放在较小的圆盘上面。

2. 分析

2.1 图解

首先我们不能一口吃下去,我们要一步一步来看

  • 如果只有一个盘子     (n == 1) 

 

那么直接 A --> C 就行了

  •  如果只有两个盘子     (n == 2)

 A --> B   A --> C  B --> C

这是基本步骤,显然发现不了什么规律

  • 如果只有三个盘子     (n == 3)

 

 都存在特殊情况:(n - 1)个盘子在 B 柱子上,最大的盘子在 C 柱子上,把(n - 1)个盘子看作整体(借助 A 柱子)放到 C 柱子上

  • 如果只有四个盘子     (n == 4)

 

不管怎么移动, 都存在特殊情况:(n - 1)个盘子在 B 柱子上,最大的盘子在 C 柱子上,把(n - 1)个盘子看作整体(借助 A 柱子)放到 C 柱子上

那这时候,递归规律就出来了 

 一句话:先把 A 柱子上(n - 1)个盘子放在 B 柱子上,在将 A柱子上第 n 个盘子放在 C 柱子上,然后将 B 柱子上(n - 2)个盘子放在 A 柱子上,在讲 B 柱子上第 (n - 1)个盘子放在 C 柱子上.....依次递归下去

2.2 代码解析

先定义一个方法用来打印运动过程

    public static void move(char p1, char p2) {System.out.print(p1 + " -> " + p2 + " ");}

在定义方法进行递归

public static void Htower(int n, char pos1, char pos2, char pos3) {if(n == 1) {move(pos1, pos3);return ;}Htower(n - 1, pos1, pos3, pos2);move(pos1, pos3);Htower(n - 1, pos2, pos1,pos3);}

这里进行代码解释

  • pos 1 ,pos 2 ,pos 3 分别代表   A      B      C  (柱子)
  • if() 语句表示有一个盘子的话,只需盘子运动一次即可
  • pos 1 :盘子的起始柱子
  • pos 2 :盘子的借助的柱子(中转位置)
  • pos 3 :盘子的终点位置(最终位置)
  • 第六行代码意思是-> 先将 A 柱子的(n - 1)个盘子借助 C 柱子移到 B 柱子上
  • 第七行代码意思是-> 在将 A 柱子剩的一个最大的盘子移到 C 柱子上
  • 第八行代码意思是->将 ​​B 柱子的(n - 1)个盘子借助 A 柱子移到 C 柱子上

3. 完整代码

public class Test {public static void move(char p1, char p2) {System.out.print(p1 + " -> " + p2 + " ");}/** pos1:起始位置* pos2:中转位置* pos3:终点位置* */public static void Htower(int n, char pos1, char pos2, char pos3) {if(n == 1) {move(pos1, pos3);return ;}Htower(n - 1, pos1, pos3, pos2);move(pos1, pos3);Htower(n - 1, pos2, pos1,pos3);}public static void main(String[] args) {// 用多组数据检测Htower(1,'A', 'B', 'C');System.out.println();Htower(2,'A', 'B', 'C');System.out.println();Htower(3,'A', 'B', 'C');System.out.println();Htower(4,'A', 'B', 'C');System.out.println();Htower(5,'A', 'B', 'C');System.out.println();}}

 3.1 运行截图

4. 小结

以上就是对该题的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持! 

http://www.yayakq.cn/news/424736/

相关文章:

  • 网站开发需求说明新网域名自助管理平台
  • 黑色网站配色全案策划
  • 郑州企业网站制作怎么做营销类网站如何优化
  • 电子商务网站建设的课程论文wordpress登录后评论
  • 网站免费发布与推广购物平台大全
  • 在中国建的网站google可收录吗怎样提高网站排名
  • 国内网站制作欣赏宝安中心地铁站时间表
  • 离石网站建设公司通过备案号查网站
  • 建设网站视频公众号文章 wordpress
  • 企业网站源码搜一品资源网邢台企业网站建设报价
  • 网站开源模板湘潭网站建设 技精磐石网络
  • 网站安全加固网络平台是什么意思
  • 哪些网站设计的好网站建设的运作原理
  • 上海高端网站建设制作微商城和小程序区别
  • wap免费网站网站的备案信息
  • 服装网站建设策划书预期投入晋宁网站建设
  • 网站怎样上传到空间app自助建站
  • 17网站一起做网店好不好广告文案模板
  • 杭州建设网站制作专业提升关键词排名工具
  • 做网站文字怎么围绕图片山东建设厅官方网站二建报名
  • 郑州做网站 艾特wordpress邮件验证
  • 保定php网站制作开发高端网站建设价格
  • 网站内容规划网站头部设计
  • 做特卖网站it培训机构培训费用
  • 腾宁网络做网站商务网站的主要存在形式
  • 自己的网站怎么做团购营销软件排名
  • 自己写代码做网站要什么技术做淘宝客网站会犯法吗
  • 360免费建站系统深圳企业网站建设设计公司
  • wordpress群站建设厅注册中心网站
  • 什么网站可以做平面设计赚钱wordpress 本地链接