汉诺塔是递归思想中的一道经典例题,电影《猩球崛起》中就有描写汉诺塔。
汉诺塔问题就是有三个柱子,我们设为A,B,C,如图现在A上有一些大小不一盘子,盘子由大到小自下而上放置,要将A上的盘子转移到C上,并且大盘子一定要在小盘子下面。
现在假设A上有3个盘子我们要将A上的盘子放到C上,要先将A最小的盘子盘子放到C,然后将A中间的盘子放到B,再将C的盘子放到B上,把A最大的一个盘子移到C,把B最上的盘子放到A,把B上的放到C,最后将A上盘子移到C,就完成交换。用图解释如下
有了3个盘子的经验,可以得到将第n-1个盘子放到B上,再将第n个盘子移到C上,就有最终代码:
static void sr(char p1,char p2){//实现将一个盘子移向另一个盘子的方法
System.out.println(p1+"->"+p2);
}
static void Hnt(int i,char p1,char p2,char p3){//实现汉诺塔的方法
if(i==1){
sr(p1,p3);
}else{
Hnt(i-1,p1,p3,p2);//将n-1个盘子从A移向C后移向B
sr(p1,p3);//将第n个判子移向C
Hnt(i-1,p2,p1,p3);//把n-1个盘子由B向A再向C
}
}
public static void main(String[] args) {
Hnt(3,'A','B','C');
}
最终3个盘子的效果为