当前位置: 首页 > news >正文

递归算法(recursion algorithm)

递归算法

什么是递归算法

在过程或者函数里调用自身的算法;

递归算法(recursion algorithm),通过重复将问题分解为同类的子问题而解决问题的方法,

Java中函数可以通过调用自身来进行递归,大多数编程语句皆是如此;

递归的作用可以完全取代循环。

递归阶乘

package com.sin.demo.recursive;/*** @author sin* @date 2022/11/2* @apiNote*/
public class RecursiveDemo {public static void main(String[] args) {int a = factorialTest(5);System.out.println(a);}/*** 递归阶乘* @param a 阶乘参数* @return*/public static int factorialTest(int a) {if (a == 0)return 1;elsereturn a * factorialTest(a - 1);}}

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tp2lCiMf-1677668556238)(递归算法.assets/image-20221102101551854.png)]

循环阶乘

public static void main(String[] args) {int a = factorialTest1(5);System.out.println(a);}/*** 循环阶乘* @param a 阶乘数* @return*/public static int factorialTest1(int a){int sum = 1;for (int i = 1 ;i<=a;i++)sum *=i;return sum;}

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4O0lGFp-1677668556239)(递归算法.assets/image-20221102101945786.png)]

分析递归

通过栈角度来理解递归方法的调用过程

栈(后进先出)(先进后出)原则

第一步

在 factorialTest()方法第一次被调用的时候,参数 a 为 5,走else代码块,执行 a * factorialTest(a - 1),相当于a * factorialTest(3)时栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJASAHvY-1677668556240)(递归算法.assets/image-20221102103119292.png)]

第二步

返回值存储器时没有返回值的,在调用factorialTest(4)后,栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5FojsuyV-1677668556240)(递归算法.assets/image-20221102103911724.png)]

第三步

返回值存储器时没有返回值的,在调用factorialTest(3)后,栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feG8AUrL-1677668556241)(递归算法.assets/image-20221102104257635.png)]

第四步

返回值存储器时没有返回值的,在调用factorialTest(2)后,栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4rsbyjK-1677668556241)(递归算法.assets/image-20221102105140879.png)]

第五步

返回值存储器时没有返回值的,在调用factorialTest(1)后,栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mG0E5hRM-1677668556242)(递归算法.assets/image-20221102105051430.png)]

第六步

返回值存储器时没有返回值的,在调用factorialTest(0)后,栈的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P0Xrg910-1677668556242)(递归算法.assets/image-20221102105303893.png)]

最后符合符合if条件,有返回值

栈的后进先出原则,进行阶乘

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SMJO7sfd-1677668556243)(递归算法.assets/image-20221102110500842.png)]

递归代码虽然只用一份,单执行的过程中,每调用一次就会入栈一次,生成不同的参数,局部变量即返回地址;

相关文章:

递归算法(recursion algorithm)

递归算法 什么是递归算法 在过程或者函数里调用自身的算法&#xff1b; 递归算法&#xff08;recursion algorithm&#xff09;&#xff0c;通过重复将问题分解为同类的子问题而解决问题的方法&#xff0c; Java中函数可以通过调用自身来进行递归&#xff0c;大多数编程语句…...

VScode下 ESP32 下载程序

ESP32-S3 下载方式可以通过UART0 下载,USB 下载&#xff0c;JTAG下载,还可以使用WIFI进行远程OTA升级程序。插件底栏按键介绍&#xff1a;①选择串口端口号&#xff0c;如COM3&#xff1b; ②选择芯片型号&#xff1b; ③工程idf设置&#xff0c;相当于menuconfig&#xff1b; …...

黑苹果日历

黑果日历 2023/2/27 总结 安装流程 制作启动U盘2017年&#xff0c;本来去当兵&#xff0c;结果近视&#x1f453;没验上。父母我还想学什么&#xff1f;我想到了黑客操作电脑的画面&#xff0c;感觉特别酷。 2017年有了第一台自己的笔记本&#xff0c;是小米游戏本&#xff0…...

python+pytest接口自动化框架(5)-requests发送post请求

在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务端通过请…...

Linux 进程:进程控制

目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分&#xff1a; 进程创建进程终止进程等待进程替换 一、进程创建 常见的创建进程的函数有两个&#xff1a; pid_t fork(void)pid_t vf…...

过滤器的创建和执行顺序

过滤器的创建和执行顺序 8.1.1创建并配置过滤器 P143 重点是如何创建并配置&#xff08;xml&#xff09; 1.创建 public class EncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFil…...

JDK1.8 ConcurrentHashMap

数据结构锁sizeCtlconcurrencyLevelForwardingNode、ReservationNode扩容get、put、removehashmap&#xff1a;线程不安全 hashtable&#xff1a;通过synchronized保证线程安全但效率低。强一致性 ConcurrentHashMap&#xff1a;弱一致性 数据结构 ConcurrentHashMap为node数…...

参考 Promise/A+ 规范和测试用例手写 Promise

前言 这可能是手写promise较清晰的文章之一。 由浅至深逐步分析了原生测试用例&#xff0c;以及相关Promise/A规范。阅读上推荐以疑问章节为切入重点&#xff0c;对比Promise/A规范与ECMAScript规范的内在区别与联系&#xff0c;确定怎样构建异步任务和创建promise实例。然后开…...

yolov5数据集制作

yolov5 数据集的格式 每个图像的标注信息存储在一个独立的txt文件中每个txt文件的名称应该与其对应的图像名称相同,只是文件扩展名不同。例如: 对于名为“image1.jpg”的图像,其标注信息应存储在名为“image1.txt”的txt文件中。 在每个txt文件中,每一行表示一个对象的标注…...

主板EC程序烧写异常致无法点亮修复经验

主板型号&#xff1a;Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500&#xff0c;但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项&#xff1a; 步骤&#xff1a; 1 使用Q-Flash先将bios升级到f31版本&#xff1b;2 然后下载提示中的ECFW Update To…...

【Java爬取赛事网站】命令行输出(仅供学习)

Java爬取赛事网站 Java爬取赛事网站Java爬取赛事网站参与社区的问题回答Gitcode项目地址PSP表格解题思路描述问题接口设计和实现过程编写中的测试关键代码展示性能改进单元测试异常处理心路历程与收获参与社区的问题回答 问题回答这个作业属于哪个课程软件工程-23年春季学期这…...

redis主从复制原理

在 Redis 中&#xff0c;我们可以通过 SLAVEOF 命令或者 slaveof 选项&#xff0c;让一个服务器去复制另一个服务器&#xff0c;被复制的服务器称为“主服务器”&#xff0c;发起复制的服务器称为“从服务器”&#xff0c;由两种服务器组成的模式称为“主从复制”。 主从复制原…...

buu刷题(第一周)

目录 [DDCTF 2019]homebrew event loop action:trigger_event%23;action:buy;5%23action:get_flag; [CISCN2019 华东南赛区]Web4 [RootersCTF2019]babyWeb [GWCTF 2019]mypassword [NESTCTF 2019]Love Math 2 [BSidesCF 2019]Pick Tac Toe [RootersCTF2019]ImgXweb [SW…...

算法训练营 day62 单调栈 每日温度 下一个更大元素 I

算法训练营 day62 单调栈 每日温度 下一个更大元素 I 每日温度 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c…...

ChIP-seq 分析:Peak 注释与可视化(9)

1. 基因注释 到目前为止&#xff0c;我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义&#xff0c;转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定&#xff0c;因此我们通常会通过一组简单的规则来注释基因的峰&#xff1a; 如果峰与…...

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例 基本步骤: 配置IO板分配IO信号这里以DeviceNet总线的DSQC652为例进行说明: 配置IO板的基本步骤:  配置IO板的型号  连接到总线  配置IO板的地址 (1台机器人可以配置多个IO板连接到DeviceNet总线,为了让机…...

2023 年网络安全漏洞的主要原因

​  网络安全漏洞已经并将继续成为企业面临的主要问题。因此&#xff0c;对于企业领导者来说&#xff0c;了解这些违规行为的原因至关重要&#xff0c;这样他们才能更好地保护他们的数据。 在这篇博文中&#xff0c;我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…...

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 34. 二叉树中和为某一值的路径 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节…...

2023前端vue面试题(边面边更)

Vue中key的作用 vue 中 key 值的作用可以分为两种情况来考虑&#xff1a; 第一种情况是 v-if 中使用 key。由于 Vue 会尽可能高效地渲染元素&#xff0c;通常会复用已有元素而不是从头开始渲染。因此当使用 v-if 来实现元素切换的时候&#xff0c;如果切换前后含有相同类型的…...

webpack配置完全指南

前言 对于入门选手来讲&#xff0c;webpack 配置项很多很重&#xff0c;如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单&#xff0c;基础的配置可以分为以下几个方面&#xff1a; entry 、 output 、 mode 、 resolve …...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...