8、递归的两个案例

 1 package ren.laughing.datastructure.Instance;
 2 /**
 3  * 递归案例
 4  * @author Laughing_Lz
 5  * @time 2016年4月13日
 6  */
 7 public class RecuisionInstace {
 8     /**
 9      * 汉诺塔问题
10      * 结束条件:当只有一个棋盘时候从x移动到z
11      * n个棋盘可看作:将n-1个棋盘借助z从x挪到y上
12      * 然后将x上最下面的棋盘挪到z上
13      * 再将n-1个棋盘借助x从y挪到z上
14      * @param n 棋盘数
15      * @param x 起始点
16      * @param y 过渡点
17      * @param z 落脚点
18      */
19     public void hanio(int n,char x,char y,char z){
20         if(n == 1){
21             System.out.println("从"+x+"挪到"+z);
22         }else{
23             hanio(n-1, x, z, y);
24             System.out.println("从"+x+"挪到"+z);
25             hanio(n-1, y, x, z);
26         }
27     }
28     /**
29      * n位布尔型数的可能组合
30      * 结束条件:若已递归到n为0时候,对m[0]赋值,再打印产生的组合
31      * @param m 存放可能产生的组合
32      * @param n n为m数组的下标最大值
33      */
34     public void coding(int[] m,int n){
35         if(n == 0){
36             m[n] = 0;
37             for (int i=0;i<m.length;i++)
38                 System.out.print(m[i]);
39                 System.out.println();
40             m[n] = 1;
41             for (int i=0;i<m.length;i++)
42                 System.out.print(m[i]);
43                 System.out.println();
44         }else{
45             m[n] = 0;coding(m, n-1);//先对第m[n]位赋值为0,继续递归
46             m[n] = 1;coding(m, n-1);//结束后再对m[n]位赋值为1,继续递归
47         }
48     }
49     public static void main(String[] args) {
50         RecuisionInstace r  = new RecuisionInstace();
51         r.hanio(4, 'x', 'y', 'z');
52         r.coding(new int[3], 2);
53     }
54 }

 

posted @ 2016-04-13 10:14  回看欧洲  阅读(157)  评论(0编辑  收藏  举报