首页 > 代码库 > java 20 -1 递归的概述和案例

java 20 -1 递归的概述和案例

  1 /*  2  * 递归:方法定义中调用方法本身的现象  3  *   4  * 方法的嵌套调用,这不是递归。  5  * Math.max(Math.max(a,b),c);  6  *   7  * public void show(int n) {  8  *         if(n <= 0) {  9  *             System.exit(0); 10  *         } 11  *         System.out.println(n); 12  *         show(--n); 13  * } 14  *  15  * 注意事项: 16  *         A:递归一定要有出口,否则就是死递归 17  *         B:递归的次数不能太多,否则就内存溢出 18  *         C:构造方法不能递归使用 19  *      20  *      public DiGuiDemo() { 21  *         DiGuiDemo(); 22  *     } 23  *  24  * 举例: 25  *         A:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是: 26  *             从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是: 27  *                 从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是: 28  *                     从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是: 29  *                         ... 30  *                 出口:    庙挂了,或者山崩了 31  *         B:学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费 32  *              学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费 33  *                 学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费 34  *                     学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费 35  *                         ... 36  *                 出口:娶不到媳妇或者生不了娃娃     37  */ 38   39   40  package zl_DiGui; 41 /* 42      有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少? 43      分析: 44                 兔子对数 45       第一个月:     1 46       第二个月:    1 47       第三个月:    2 48       第四个月:    3     49       第五个月:    5 50       第六个月:    8 51       1,1,2,3,5,8... 52      规则: 53          A:从第三项开始,每一项都是前两项之和 54          B:第一第二项都是已知的 55     方法: 56         A:数组 57         B:变量的变化实现 58                 第一个月  a=1,b=1; 59                 第二个月  a=1,b=2; 60                 第三个月  a=2,b=3; 61                 第四个月  a=3,b=5; 62                 ... 63                 每个月的a,是上个月的b,每个月的b,是上个月的a+b 64         C:递归 65             a:返回类型 int 66             b:参数列表 int n (月份) 67             c:出口:n = 1 || n ==2 时,就是第一个月或第二个月时 68              69  */ 70 public class DiGuiDemo1 { 71  72     public static void main(String[] args) { 73          74         //第一种方法:数组 75         int[] ary = new int[20]; 76         ary[0] = 1; 77         ary[1] = 1; 78          79         for(int x = 2; x < ary.length ; x ++){ 80             ary[x] = ary[x - 1] + ary [x - 2]; 81         } 82         System.out.println(ary[19]); 83          84         //第二种方法:变量的变化实现 85         int a = 1; 86         int b = 1; 87         for(int y = 3 ; y <= 20 ; y ++){ 88             int temp =  a; 89             a = b; 90             b = temp + a ; 91         } 92         System.out.println(b); 93          94         //调用递归 95         System.out.println(digui(20)); 96     } 97         //递归 98     public static int digui(int n ) { 99         if(n == 1 || n == 2){100             return 1;101         }else{102             return digui(n-1) + digui(n-2);103         }104     }105 }

 

 递归解决问题的思想及图解

 

技术分享

递归求阶乘的代码实现及内存图解

 

技术分享

java 20 -1 递归的概述和案例