// from 是移动过程中,当前碟所在的柱子// to 是移动过程中,当前碟所要到达的柱子// dependOn 是另外一根柱子public class Hanoi { public void haNoi(int n,char from,char dependOn,char to) { if(n == 1) { move(n,from,to); }else { haNoi(n-1, from, to, dependOn); move(n,from,to); haNoi(n-1, dependOn, from, to); } } /** * 递归思想 * A B C三个柱子 * * 先假如前面n-1是已经完成的,那么前n-1个的动作是递归式地从from通过to移动到dependOn * 然后再将第n个从from移动到to * 再将前面的n-1个递归式地从dependOn通过from移动到to * */ public void haNoi2(int n,char from,char dependOn,char to) { if(n>0) { haNoi2(n-1, from, to, dependOn); move(n,from,to); haNoi2(n-1, dependOn, from, to); } } private void move(int i, char from, char to) { System.out.println("第"+i+"个盘子从"+from+"------>"+to); } public static void main(String[] args) { int n = 36; Hanoi hanoi = new Hanoi(); hanoi.haNoi(n, 'A', 'B', 'C'); System.out.println("--------");// hanoi.haNoi2(n, 'A', 'B', 'C'); }}