如图:将a塔上面的所有的盘移动到c塔,每次只能移动一个盘,小盘必须在大盘的上面,求出移动过程。
public class P226HanNuoTa {
public static void main(String[] args) {
Tower tower = new Tower();
tower.Moov(5,'A','B','C');
}
}
class Tower{
//方法分析:
//1、先定义有多少个盘和塔 num盘数、a表示A塔、b表示B塔、c表示C塔
//2、当只有一个盘的时候,直接a->c
//3、多个盘的情况可以看成是最下面的一个盘和上面的所有盘(num-1)两个部分
//4、当多个盘的时候,a->c需要借助于b,先将上面的所有盘移动到b,
// 再将b上面的盘移到c上,则还需要借助于a
public void Moov(int num, char a, char b,char c){
if (num==1){//当只有一个盘的时候
System.out.println(a+"->"+c);
}else {
Moov(num-1,a,c,b);//先借助c将a上面的所有盘(不包括最下面一个)移动到b
System.out.println(a+"->"+c);//a上最下面一个移动到c
Moov(num-1,b,a,c);//借助a把吧、上的盘移动到c
System.out.println(b+"->"+c);
}
}
}

这篇博客探讨了经典的汉诺塔问题,通过递归算法详细解释了如何将所有盘子从A塔移动到C塔,每次移动一个盘且小盘必须在大盘之上。提供的Java代码展示了如何实现这一过程,包括将塔中除最底部盘子外的所有盘子移动到辅助塔,然后将最底部盘子移动到目标塔,最后再将辅助塔的盘子移动到目标塔的完整逻辑。

1629

被折叠的 条评论
为什么被折叠?



