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 }

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

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

转载于:https://www.cnblogs.com/LZL-student/p/5917869.html

java 20 -1 递归的概述和案例相关推荐

  1. java 20 -3 递归之删除特定目录下的特定文件

    1 /* 2 需求:删除H:\demo目录下的带内容的文件 3 分析: 4 A:封装该目录 5 B:获取该目录下所有的文件或文件夹的File数组 6 C:遍历该File数组,获取每一个File对象 7 ...

  2. 【从零开始的Java开发】1-5-4 ArrayList、HashSet、HashMap 概述与案例

    文章目录 集合框架的体系结构 List概述 ArrayList 案例:在List中操作String 案例:公告管理--在ArrayList中对自定义对象的操作 Set概述 案例:在Set中操作Stri ...

  3. java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

    java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...

  4. Java定时任务(一) Timer及TimerTask的案例解析及源码分析

    Java定时任务(一)  Timer及TimerTask的案例解析及源码分析 一.概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样.比如我们会注意到12306网站 ...

  5. js递归理解及使用案例

    递归在平时开发中会经常用到,递归是一种编程技巧,采取函数调用函数自身的方式工作 下面是递归的特点以及使用案例 一.递归是什么? 递归通俗地讲就是函数自己调用自己,它具有以下三要素 1.一个问题可以分解 ...

  6. Java重构与TDD测试驱动开发实际案例一-陈勇-专题视频课程

    Java重构与TDD测试驱动开发实际案例一-2117人已学习 课程介绍         本课程将高深的重构与TDD理论埋藏在一个实际案例中,深入浅出地演示了重构与TDD的完整步骤. 在这个真实的案例中 ...

  7. 8.递归遍历和删除案例

    递归遍历和删除文件夹案例 package com.io.file;import java.io.File;/*** 递归遍历和删除*/ public class Demo3 {public stati ...

  8. java中的递归函数调用函数_Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

  9. 全网最全的JAVA所有版本特性【JAVA 1.0 - JAVA 20】

    闲来想了解下各版本之间的特性,搜索没有最新的特性说明,故想写一份.废话不多说. PS:绝对全网最全最齐,若不是,请私聊我补充,哈哈哈哈! JDK Version 1.0 1996-01-23 Oak( ...

  10. java 递归查找,Java程序使用递归查找自然数之和

    Java程序使用递归查找自然数之和 在此程序中,您将学习使用Java递归来查找自然数之和.这是在递归函数的帮助下完成的. 正数1.2.3 ...称为自然数.下面的程序从用户处获取一个正整数,然后计算得 ...

最新文章

  1. 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
  2. Nmap源码分析(操作系统扫描)
  3. NumPy之:标量scalars
  4. 一文读懂常用开源许可证
  5. 9 计算机组成原理第五章 中央处理器 指令流水线
  6. 注会考试不可以用计算机,CPA机考,不让带计算器该如何做?
  7. eureka注册中心之服务提供者
  8. java 子集_java – 带负数的子集和
  9. 大数据?这些你了解吗?------之基础知识篇
  10. 随想录(skyeye中的soc仿真)
  11. win10休眠_电脑升级win10后,必做的5项优化,至少提升20%的运行速度
  12. simulate-device测试onenet云平台
  13. SWAT模型教程---土地利用、土壤数据、气象数据的处理
  14. Snake活动轮廓模型Matlab实现
  15. 树莓派Python 按键实验
  16. 做知识付费,这十大知识付费平台一定要知道
  17. PHP使用PHPMailer实现发送qq邮箱
  18. 阻滞增长函数matlab拟合,matlab指数增长和阻滞增长拟合代码讲课稿
  19. java程序设计实用教程高飞pdf_普通高等教育“计算机类专业”规划教材:Java程序设计实用教程习题集 pdf epub mobi txt 下载...
  20. Android Studio如何更新至最新版本4.2.2

热门文章

  1. linux系统securecrt无法访问,在securecrt官网下载的securecrt for linux版无法启动
  2. 关于程序化交易的点点知识
  3. MySQL之 视图,触发器,事物,存储过程,函数(Day48)
  4. TCP/IP的全部IP协议号
  5. linux查看硬件信息及驱动设备
  6. 从web页面请求的历程出发了解计算机网络的基础知识
  7. 简约大方干净明亮“现代简约细体字体”
  8. 批量导出数据和全部导出到Excel(详细)和mybatis 中 Foreach的用法
  9. [月报] 掘金翻译计划月报 — 2018 年 11 月
  10. 如何在没有域的环境中搭建AlwaysOn(一)