递归:

递归的概念:方法自身调用自身则称为递归。

递归的分类:

间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A。

直接递归: 方法A调用方法A。(常用)

递归的注意事项:

递归一定要出口:结束递归的条件。

递归次数不要太多。

如果递归不结束,则会报错。

java.lang.StackOverflowError: 栈内存溢出错误

递归会内存溢出隐患的原因:

方法不停地进栈而不出栈,导致栈内存不足。

递归的三个条件:

1). 明确递归终止条件

我们知道,递归就是有去有回,既然这样,那么必然应该有一个明确的临界点,程序一旦到达了这个临界点,就不用继续往下递去而是开始实实在在的归来。换句话说,该临界点就是一种简单情境,可以防止无限递归。

2). 给出递归终止时的处理办法

我们刚刚说到,在递归的临界点存在一种简单情境,在这种简单情境下,我们应该直接给出问题的解决方案。一般地,在这种情境下,问题的解决方案是直观的、容易的。

3). 提取重复的逻辑,缩小问题规模*

我们在阐述递归思想内涵时谈到,递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

下面通过示例程序来说明:

1.阶乘

public class Test01 {

public static void main(String[] args) {

System.out.println(f(5));

}

public static int f(int n) {

if (1 == n)

return 1;

else

return n*f(n-1);

}

}

2.斐波纳契数列

public static int f(int n) {

if (n == 1 || n == 2) { // 递归终止条件

return 1; // 简单情景

}

return f(n - 1) + f(n - 2); // 相同重复逻辑,缩小问题的规模

}

3.回文字符串的判断

public static boolean isPalindromeString_recursive(String s){

int start = 0;

int end = s.length()-1;

if(end > start){ // 递归终止条件:两个指针相向移动,当start超过end时,完成判断

if(s.charAt(start) != s.charAt(end)){

return false;

}else{

// 递归调用,缩小问题的规模

return isPalindromeString_recursive(s.substring(start+1).substring(0, end-1));

}

}

return true;

}

递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。

循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门(若前面两扇门都一样,那么这扇门和前两扇门也一样;如果第二扇门比第一扇门小,那么这扇门也比第二扇门小,你继续打开这扇门,一直这样继续下去直到打开所有的门。但是,入口处的人始终等不到你回去告诉他答案。

java中的v递归的思想,Java中的递归思想 - osc_9lqilnv7的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java把abcedf字符串进行排序_字符串合并处理 - 一贱书生的个人空间 - OSCHINA - 中文开源技术交流社区...

    题目描述 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串 ...

  2. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...

    抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...

  3. java链表源码_JAVA之链表源码 - 飞翔的南极企鹅的个人空间 - OSCHINA - 中文开源技术交流社区...

    TLinkTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNode class TLinkNode>{ int size = 0; TNode ...

  4. MySQL中购买的语句,mysql操作语句 - 买灰机自己开的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.对数据库的CRUD 1.创建数据库:create database  数据库名[character set 字符集] 2.查询所有数据库:show databases 3.查询数据库定义结构:sh ...

  5. html中怎么把文字环绕圆形,让文字环绕圆形图片 - sweethome的个人空间 - OSCHINA - 中文开源技术交流社区...

    样式如下 .curve { width: 33%; height: auto; min-width: 150px; float: left; margin-right:2rem; border-rad ...

  6. java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区

    一.用法 javap [ 选项 ] classes 二.描述 javap命令反汇编一个或多个类文件.它的输出由使用的选项决定.如果没有使用选项,javap命令将打印输出传递给它的类的包, protec ...

  7. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java对象的创建过程包括类初始化(类实例化两个阶段. 一.Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 Student st ...

  8. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

  9. 每天学习java一小时_java再学感受 - 编程一小时的个人空间 - OSCHINA - 中文开源技术交流社区...

    首先的是,我买了一本新的有关于java的书,刚开始看,其实在此之前我已经学了一本java语法的书本,现在我买的这本书是我用来提升自己的java认知水平的,首先是对这本书的第一印象吧,里面的内容比较详细 ...

最新文章

  1. Python中pass、continue、break、exit()的区别
  2. Linux数据报文接收发送总结3
  3. CIKM 2021 | 多场景下的星型CTR预估模型STAR
  4. 在PHP服务器上使用JavaScript进行缓慢的Loris攻击[及其预防措施!]
  5. 信捷伺服刚性调整_信捷電氣(603416):伺服與PLC增長將加速,口罩機解決方案帶來新增量...
  6. Python-OpenCV 处理图像(一):基本操作 cv2
  7. 深度学习《WGAN模型》
  8. 30 秒裁剪的很大一部分作用是观察什么对别人是重要的
  9. PinPhoto On OS X
  10. Jmeter学习笔记4-集合点
  11. 数据处理中常用的Excel函数
  12. 研华工控台式计算机选型,工控机选型手册.pdf
  13. Android开发丶调用百度地图进行导航
  14. es 创建索引 指定id_elasticsearch创建索引
  15. 英语四级——常考语法【不断更新中】
  16. KEIL5 AC6 出现printf告警
  17. python智能光环板_什么是光环板?
  18. 我们分析了金庸小说中出现的1367个人物名字,发现了一些相当惊人的事情
  19. 手机安装linux模拟器教程,Ubuntu下安装Android模拟器
  20. 2020年燃料电池行业研究及产业链梳理

热门文章

  1. 多线程Runnable类创建多线程
  2. HugeGraphServer 部署安装
  3. 最佳实践|Spring Boot 应用如何快速接入 Prometheus 监控
  4. 我在阿里云做前端代码智能化
  5. 深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?
  6. 万师傅使用云产品,上手简单、开箱即用、省去运维烦恼
  7. 给 AI 讲故事,如何教它脑补画面?
  8. 云原生应用 Kubernetes 监控与弹性实践
  9. 支撑双十一的网络引擎:飞天洛神
  10. 第一个将Palette Mode引入VVC(H.266),阿里云在JVET会议上引起关注