汉诺塔问题(java解析代码版)

此文章只解析代码部分问题,理解汉诺塔,但是不理解代码的可以看一下,希望能帮到各位,如果有什么地方错了,欢迎指正。

不过其实主要还是给自己看的,怕到时候忘记

汉诺游戏规则如下:

1、有三根相邻的柱子,标号为A,B,C。

2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。

3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

  • 思路:我也不会,先看move()部分代码先,不懂的看解析,然后就会了
java 复制代码
public void move(int n,char a,char b,char c) {
        if (n == 1){
            System.out.println(a+"->"+c);
        }else {  //先将这个代码假设 n = 2 来分析这段代码
            //将a移b
            move(n-1,a,c,b);
            //将a移到c
            System.out.println(a+"->"+c);
            //将中间的b移到c
            move(n-1,b,a,c);
        }
    }

解析:建议自己画图分析 ,然后再看就会了

看完自己再分析一下就懂了。

然后如果我自己忘记了

那大于二的盘子怎么走?比如n =3,但是头两个盘子已经被移到c柱子了。

但是注意第一步传入的参数并不是abc而是acb ,所以,头两个盘子是被移动到B柱子了

相关推荐
清水白石008几秒前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json
晊晌_h15 分钟前
嵌入式从0到精通——线程
java·开发语言·jvm
一木 之林22 分钟前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++
OPEN-F37 分钟前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
洋不写bug38 分钟前
绕过权限检查,访问修改私有属性,反射,枚举,lambda
java·枚举·lambda·反射
小灰灰搞电子38 分钟前
Rust+Slint 实现动态轮播图源码分享,支持动态删除、添加
开发语言·rust·slint·动态轮播图
前端 贾公子42 分钟前
第09章:上下文与记忆 (6)
开发语言·前端·python
evans在进步44 分钟前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
lisin-lee-cooper1 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-1 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法