此文章只解析代码部分问题,理解汉诺塔,但是不理解代码的可以看一下,希望能帮到各位,如果有什么地方错了,欢迎指正。
不过其实主要还是给自己看的,怕到时候忘记
汉诺游戏规则如下:
1、有三根相邻的柱子,标号为A,B,C。
2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。
3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
- 思路:我也不会,先看move()部分代码先,不懂的看解析,然后就会了
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柱子了