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 }