java 汉诺塔 递归算法

一、玩法

  1.有三根杆子A,B,C。A杆上有若干碟子  
  2.每次移动一块碟子,小的只能叠在大的上面  
  3.把所有碟子从A杆全部移到C杆上

二、解答思路 

这是一个典型的递归场景的应用

 1 // n- 要移动的碟数 
 2 // a- 移动杆,b- 借助杆,c- 目标杆
 3 public static hanoi(int n,String a ,String b,String c) {
 4       if(n == 1) {
 5             System.out.println(a + "--->" + c);
 6       } else {
 7             hanoi(n-1,a,c,b);
 8             System.out.println(a + "--->" + c);
 9             hanoi(n-1,b,a,c);
10       }    
11 }
View Code

1、若A杆上只有一个碟子,直接移动到C

if(n==1) {
    System.out.println(a + '--->' + c);      
}

2、若A杆上碟子数为n(n>1),分“三步走”

  2.1、将A杆上n-1个碟子借助C移动到B

hanoi(n-1,a,c,b)

  2.2、将A杆上最后一个移动到C

System.out.println(a + "--->" + c)

  2.3、将B杆上的n-1个碟借助A移动到C

hanoi(n-1,b,a,c)

 

  

 

你可能感兴趣的:(java 汉诺塔 递归算法)