1. // from 是移动过程中,当前碟所在的柱子
    2. // to 是移动过程中,当前碟所要到达的柱子
    3. // dependOn 是另外一根柱子
    4. public class Hanoi {
    5. public void haNoi(int n,char from,char dependOn,char to) {
    6. if(n == 1) {
    7. move(n,from,to);
    8. }else {
    9. haNoi(n-1, from, to, dependOn);
    10. move(n,from,to);
    11. haNoi(n-1, dependOn, from, to);
    12. }
    13. }
    14. /**
    15. * 递归思想
    16. * A B C三个柱子
    17. *
    18. * 先假如前面n-1是已经完成的,那么前n-1个的动作是递归式地从from通过to移动到dependOn
    19. * 然后再将第n个从from移动到to
    20. * 再将前面的n-1个递归式地从dependOn通过from移动到to
    21. *
    22. */
    23. public void haNoi2(int n,char from,char dependOn,char to) {
    24. if(n>0) {
    25. haNoi2(n-1, from, to, dependOn);
    26. move(n,from,to);
    27. haNoi2(n-1, dependOn, from, to);
    28. }
    29. }
    30. private void move(int i, char from, char to) {
    31. System.out.println("第"+i+"个盘子从"+from+"------>"+to);
    32. }
    33. public static void main(String[] args) {
    34. int n = 36;
    35. Hanoi hanoi = new Hanoi();
    36. hanoi.haNoi(n, 'A', 'B', 'C');
    37. System.out.println("--------");
    38. // hanoi.haNoi2(n, 'A', 'B', 'C');
    39. }
    40. }