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;

}

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日站会——你的站会姿势正确吗?

今天我们讲讲如何利用站会,更好地实现促进团队有效协作和聚焦,促进价值顺畅流动和交付,同时及时的暴露问题和风险。 站会的目标 说到站会,人们最熟悉的Scrum站会,典型的形式是团队围成一圈,依次回答三个问…

springboot2 配置redis报错 redis timeout Value not a valid duration解决办法

配置文件加上时间单位ms就好了, application.yml spring:redis:# Redis数据库索引(默认为0)database: 10# Redis服务器地址host: 192.168.203.220# Redis服务器连接端口port: 6379# Redis服务器连接密码(默认为空)pas…

TableStore实战:DLA+SQL实时分析TableStore

一、实战背景 什么是DLA(DataLake Analytics数据湖)?他是无服务器化(Serverless)的云上交互式查询分析服务。作为分布式交互式分析服务,是表格存储计算生态的重要组成之一。为了使用户更好的了解DLA的功能…

matlab里用fix函数,Matlab基本函数-fix函数

1、fix函数:向零方向取整2、用法说明:yfix(x) 函数将x中元素零方向取整,得到y是一个整数数组。对于复数z,分别对实部和虚部取整3、举例说明>> x [1-2.9i 34.5i 5-6.7i 9-10.2i]x 1.0000 - 2.9000i 3.0000 4.5000i 5.0000 …

权限管理快速入门_01

文章目录一、表结构设计二、权限方法2.1. 根据用户id,查询用户拥有的角色列表2.2. 根据角色id,查询用户拥有的权限列表2.3. 获取用户拥有权限的菜单列表彩蛋: 组装数据成树工具类补充表结构一、表结构设计 一般权限管理由5张表构成(3张主表2张中间表):包…

云栖专辑 | 阿里开发者们的第8个感悟:在信息大爆炸的时代,保持专注度显得尤为可贵

2015年12月20日,云栖社区上线。2018年12月20日,云栖社区3岁。 阿里巴巴常说“晴天修屋顶”。 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备。 所以社区特别制作了这个专辑——分享给开发者们20个弥足珍贵的…

php脚本防上多进程同时执行,Jorker

软件简介Jorker — 脚本多进程执行功能脚本多进程执行支持中断续运行内存过载保护定时报告进度高度可配置安装composer require jorker/jorker用法require_once(dirname(__DIR__) . /vendor/autoload.php);$manager new \Jorker\JobForkerManager(3);$manager->allot(funct…

手机秒变IoT设备?——巧妙利用阿里云物联网平台

什么?嵌入五行代码可以实现用户定位,用户在线数量统计,还能和云端消息交互! 没错得益于阿里云物联网套件创建设备免费,消息收费也只有百万消息三块六(先使用后付费,不满不要钱)&…

springboot3.x 集成持久层框架

文章目录一、通用部分1. 通用依赖2. 通用配置 yml二、 springboot3.x 集成通用mapper2.1. pom.xml2.2. yml2.3. mapper接口2.4. 启动类加MapperScan注解2.5. 启动类加ComponentScan注解三、 springboot3.x 集成通用Mybatis3.1. pom.xml3.2. yml3.3. mapper接口3.4. 启动类加Map…

阿里CEO逍遥子:学会“用人做事”,而不是“做事用人”

你们知道的,双11之后,我们做了一件晴天修屋顶的事儿,就是进行组织架构的调整——阿里云升级为阿里云智能;天猫升级为“大天猫”,形成天猫事业群、天猫超市事业群、天猫进出口事业部三大板块;加强技术、智能…

51php 数据不同步,php避免循环查询数据库优化一对多查询

列表查询中一对多查询循环查询优化,mysql循环查询优化描述比如查询学生列表,每一行需要包含该学生的家长列表,一个学生对应多个家长。循环查询方式先查出学生列表,再循环查询对应的家长列表,需要查询N1次但在循环中查询…

Spring Cloud Alibaba发布第二个版本,Spring 发来贺电

还是熟悉的面孔,还是熟悉的味道,不同的是,这次的配方升级了。 今年10月底,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。随后…

JWT操作工具类分享

分享个人操作的JWT的工具类,基于jjwt库,这是Java圈子中最流行的JWT操作库。 文章目录一、应用场景二、实战案例1. jjwt 开源地址2. 加依赖3. 工具类4. 写配置5. 使用三、企业需求一、应用场景 给用户不敏感信息生成token,作为用户登陆的唯一…

服务器zip解压php,服务器端解压缩zip的脚本

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">文件解压缩管理// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead// of $_FILES.if (isset($_POST…

阿里研究员谷朴:API 设计最佳实践的思考

API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素。但复杂度Complexity并非某一个单独的问题能完全败坏的,而是在系统设计尤其是API设计层面很多很多小的设计考量一点点叠加起来的(也即John Ousterhou…

sonar扫描脚本

vim DynamicStartSonarShell.sh添加内容如下&#xff1a; #!/bin/bash #su - $1 -s /bin/bash /app/CodeQualityScan/$2/sonar-scanner.sh su - $1 <<EOF cd /app/CodeQualityScan/$2/; ./sonar-scanner.sh exit; EOF赋予可执行权限&#xff1a; chmod ux DynamicStartSo…

linux php 添加gd,linux(centos)下为php添加添加GD扩展

标签&#xff1a;inux type lib eve MIP 依赖库 重启nginx nginx linuxyum -y install libjpeglibjpeg-devel libpng libpng-devel freetype freetype-devel 安装依赖库yum -y install libjpeg-devel1.首先切换到php源码目录&#xff1a;/usr/local/php-5.6.29…

2018年深度学习的主要进步

在过去几年中&#xff0c;深度学习改变了整个人工智能的发展。深度学习技术已经开始在医疗保健&#xff0c;金融&#xff0c;人力资源&#xff0c;零售&#xff0c;地震检测和自动驾驶汽车等领域的应用程序中出现。至于现有的成果表现也一直在稳步提高。 在学术层面&#xff0…

大横琴科技联合阿里云发布全国首个跨境服务创新平台琴澳通

12月3日&#xff0c;阿里云广东峰会期间&#xff0c;大横琴科技公司联合阿里云发布了全国首个跨境服务创新平台。基于该平台&#xff0c;全国首个跨境服务APP“琴澳通”也正式发布。“琴澳通”将为澳门企业及个人提供服务&#xff0c;推动澳门和广东两地的产业经济联动&#xf…

各类监督方法流行趋势分析

又到一年的年末了&#xff0c;到了进行总结并展望来年的时候了&#xff0c;在这里预祝各位新的一年顺利。闲话少叙&#xff0c;本文将对有监督学习方法进行总结。 机器学习领域在过去几十年中经历了巨大的变化&#xff0c;不可否认的是&#xff0c;虽然有些方法已经存在了很长…