汉诺塔游戏是递归中的经典问题。简单来说就是将若干碟子按照要求移动到目标位置。
大致过程如下图:
思路:将这一摞碟子看成两个部分,即1~(N-1)和第N个。采用递归的方法我们需要先明确这个问题的子问题,将其想象做从A处移动两个盘子,使其最终处于目标B处。
public class Hanoi {
public static void main(String[] args) {
hanoi(3,"A","B","C");
}
/*
i: 表示一共有几个盘子
from: 表示开始的位置(柱子)
help: 表示过度柱子
to: 表示目标位置(最终要移到的位置柱子)
*/
public static void hanoi(int i,String from,String to,String help){
if(i==1){
System.out.println("move"+i+"from"+from+"to"+to);
return;
}else {
hanoi(i-1,from,help,to);
System.out.println("move"+i+"from"+from+"to"+to+"!");
hanoi(i-1,help,to,from);
}
}
}
需要注意的是,此处将from,to,help,分别赋值为A,B,C;在方法体语句中from,to,help的值是有变化的: