• 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 }

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

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

    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    微信机器人开发SDK使用教程--清粉任务
    微信机器人开发SDK使用教程--养号任务停止
    linux和 unix 介绍
    thinkphp5.1学习笔记
    nginx的相关配置记录和总结
    php优秀框架codeigniter学习系列——CI_URI类学习
    求职过程中的灵感
    设计模式学习系列——过滤器模式
    php优秀框架codeigniter学习系列——CI_Utf8类
    php优秀框架codeigniter学习系列——hooks
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5917869.html
Copyright © 2020-2023  润新知