当前位置: 首页 > 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)]

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

http://www.lryc.cn/news/25470.html

相关文章:

  • VScode下 ESP32 下载程序
  • 黑苹果日历
  • python+pytest接口自动化框架(5)-requests发送post请求
  • Linux 进程:进程控制
  • 过滤器的创建和执行顺序
  • JDK1.8 ConcurrentHashMap
  • 参考 Promise/A+ 规范和测试用例手写 Promise
  • yolov5数据集制作
  • 主板EC程序烧写异常致无法点亮修复经验
  • 【Java爬取赛事网站】命令行输出(仅供学习)
  • redis主从复制原理
  • buu刷题(第一周)
  • 算法训练营 day62 单调栈 每日温度 下一个更大元素 I
  • ChIP-seq 分析:Peak 注释与可视化(9)
  • ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例
  • 2023 年网络安全漏洞的主要原因
  • 剑指 Offer 34. 二叉树中和为某一值的路径
  • 2023前端vue面试题(边面边更)
  • webpack配置完全指南
  • juju创建lxd容器时如何使用本地镜像(by quqi99)
  • 后端程序员学习前端开发之第一步环境搭建
  • 【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库
  • 自动化测试难点案例分析,其实自动化你用错方向还不如不用
  • 866363-70-4,N3-C5-NHS ester,叠氮-C5-NHS 主要物理性质分享
  • 字符流定义及如何深入理解字符流的编码
  • 什么是pod类型
  • 2023年中小企业实施智能制造的建议
  • 【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version
  • linux和windows中安装emqx消息服务器
  • 【XXL-JOB】XXL-JOB的搭建和使用