java中的v递归的思想,Java中的递归思想 - osc_9lqilnv7的个人空间 - OSCHINA - 中文开源技术交流社区...
递归:
递归的概念:方法自身调用自身则称为递归。
递归的分类:
间接递归:方法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 - 中文开源技术交流社区...相关推荐
- java把abcedf字符串进行排序_字符串合并处理 - 一贱书生的个人空间 - OSCHINA - 中文开源技术交流社区...
题目描述 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串 ...
- JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...
- java链表源码_JAVA之链表源码 - 飞翔的南极企鹅的个人空间 - OSCHINA - 中文开源技术交流社区...
TLinkTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNode class TLinkNode>{ int size = 0; TNode ...
- MySQL中购买的语句,mysql操作语句 - 买灰机自己开的个人空间 - OSCHINA - 中文开源技术交流社区...
一.对数据库的CRUD 1.创建数据库:create database 数据库名[character set 字符集] 2.查询所有数据库:show databases 3.查询数据库定义结构:sh ...
- html中怎么把文字环绕圆形,让文字环绕圆形图片 - sweethome的个人空间 - OSCHINA - 中文开源技术交流社区...
样式如下 .curve { width: 33%; height: auto; min-width: 150px; float: left; margin-right:2rem; border-rad ...
- java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区
一.用法 javap [ 选项 ] classes 二.描述 javap命令反汇编一个或多个类文件.它的输出由使用的选项决定.如果没有使用选项,javap命令将打印输出传递给它的类的包, protec ...
- java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
Java对象的创建过程包括类初始化(类实例化两个阶段. 一.Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 Student st ...
- java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...
1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...
- 每天学习java一小时_java再学感受 - 编程一小时的个人空间 - OSCHINA - 中文开源技术交流社区...
首先的是,我买了一本新的有关于java的书,刚开始看,其实在此之前我已经学了一本java语法的书本,现在我买的这本书是我用来提升自己的java认知水平的,首先是对这本书的第一印象吧,里面的内容比较详细 ...
最新文章
- Python中pass、continue、break、exit()的区别
- Linux数据报文接收发送总结3
- CIKM 2021 | 多场景下的星型CTR预估模型STAR
- 在PHP服务器上使用JavaScript进行缓慢的Loris攻击[及其预防措施!]
- 信捷伺服刚性调整_信捷電氣(603416):伺服與PLC增長將加速,口罩機解決方案帶來新增量...
- Python-OpenCV 处理图像(一):基本操作 cv2
- 深度学习《WGAN模型》
- 30 秒裁剪的很大一部分作用是观察什么对别人是重要的
- PinPhoto On OS X
- Jmeter学习笔记4-集合点
- 数据处理中常用的Excel函数
- 研华工控台式计算机选型,工控机选型手册.pdf
- Android开发丶调用百度地图进行导航
- es 创建索引 指定id_elasticsearch创建索引
- 英语四级——常考语法【不断更新中】
- KEIL5 AC6 出现printf告警
- python智能光环板_什么是光环板?
- 我们分析了金庸小说中出现的1367个人物名字,发现了一些相当惊人的事情
- 手机安装linux模拟器教程,Ubuntu下安装Android模拟器
- 2020年燃料电池行业研究及产业链梳理
热门文章
- 多线程Runnable类创建多线程
- HugeGraphServer 部署安装
- 最佳实践|Spring Boot 应用如何快速接入 Prometheus 监控
- 我在阿里云做前端代码智能化
- 深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?
- 万师傅使用云产品,上手简单、开箱即用、省去运维烦恼
- 给 AI 讲故事,如何教它脑补画面?
- 云原生应用 Kubernetes 监控与弹性实践
- 支撑双十一的网络引擎:飞天洛神
- 第一个将Palette Mode引入VVC(H.266),阿里云在JVET会议上引起关注