单位做网站资料需要什么软件,统一登录入口,wordpress 插件和工具栏,互联网推广渠道有哪些#x1f525;博客主页#x1f525;#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞#x1f44d;评论✍收藏⭐ 目录 1. 题目
2. 分析
2.1 图解
2.2 代码解析
3. 完整代码 3.1 运行截图
4. 小结 1. 题目
汉诺塔问题是一个经典的递归问题#xff0c;源自一个古老的印度传… 博客主页【 坊钰_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. 小结
以上就是对该题的了解具体还需宝子们去实践如果觉得该博客对你有用的话希望一键三连点个关注不迷路谢谢支持