递归实例--汉诺塔问题
发布日期:2021-11-02 12:35:11
浏览次数:3
分类:技术文章
本文共 1226 字,大约阅读时间需要 4 分钟。
汉诺塔详情请参考:
汉诺塔规则: 有n个盘子,从第一个柱子,移动到第三个柱子。要求每个盘子从柱子上到柱子下,序号是从小到大。 假设三个柱子:A,B,C 我们要求将所有盘子 从A移动C 分析: 当盘子是一个的时候,直接将盘子从A移动到C当是两个盘子的时候,我们将上方盘子标记为序号1,下面个盘子为序号2.
(1)我们将1移动到B,(上方的盘子从A移动到中间位置) (2)2移动到C, (将最后一个盘子从A移动到C) (3)最后将1从中间位置B移动到C。(将上方的盘子,从中间移动到第三位置)当时三个盘子的时候,我们一次从上到下给盘子标号1,2,3.
(1)我们将1移动到C,将2移动到B,再将1从C移动到B,(到这里我们将上方两个盘子作为一个整体,并且将它整体移动到了中间位置) (2)将3从A移动到C, (3)将1从B移动到A,将2从B移动到C,将1从A移动到C(这一步是将上方两个盘子整体从中间位置移动到第三位置)推论:无论多少个我们都将其视为两个盘子,将上方的n-1个盘子视为整体,最后一个盘子视为一个整体。
我们只需要完成三步骤: 1.将上方n-1个盘子从第一位置移动到中间位置 2.将最后一个盘子n从第一位置移动到最后 3.将上方的n-1个盘子从中间位置移动到第三位置代码实现:
public class Hanoi{ public static void main(String[] args){ hanoi(3,'A','B','C'); } /** * * @param n 柱子数量 * @param init 第一个柱子 * @param middle 中间柱子 * @param desti 目标柱子 */ public static void hanoi(int n,char init,char middle,char desti){ if(n==1){ System.out.println("第1个盘子从"+init+"--->"+desti); }// else{ //移动上面的所有盘子借助(第三个柱子)从第一个柱子移动到中间柱子 hanoi(n-1,init,desti,middle); //移动第n个,从第一个位置移动到第三个柱子 System.out.println("第"+n+"个盘子从"+init+"--->"+desti); //将上面所有盘子从中间柱子移动到第三个位置 hanoi(n-1,middle,init,desti); } }}
转载地址:https://blog.csdn.net/weixin_43919632/article/details/90652312 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月19日 12时54分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
android截屏代码
2019-04-27
unity NGUI图文混排
2019-04-27
Unity项目优化
2019-04-27
Unity3D Shader 入门
2019-04-27
MSDK手Q邀请透传参数问题:url编解码与base64编解码
2019-04-27
svn提交的一个坑
2019-04-27
eclipse识别不了模拟器解决办法
2019-04-27
unity mesh合并
2019-04-27
谈谈类之间的关联关系与依赖关系
2019-04-27
unity5.x assetbundle打包和加载
2019-04-27
C#用正则表达式去匹配被双引号包起来的中文
2019-04-27
lua table排序
2019-04-27
Unity发布的ios包在iphone上声音是从听筒里出来的问题
2019-04-27
UIScrollView复用节点示例
2019-04-27
Unity 5 AudioMixer
2019-04-27
Unity 代码混淆: CodeGuard的使用
2019-04-27
UGUI 列表循环使用
2019-04-27
使用命令行运行unity并执行某个静态函数(运用于命令行打包和批量打包)
2019-04-27
web.py框架
2019-04-27