递归算法讲解(结合内存图)

递归算法

递归是快速排序的基础,所以一定要理解基本概念!

递归其实就是一种循环

for循环/while循环,循环的是一个代码块
递归循环,循环的是一个方法

递归的定义,作用,本质

本质:方法不断调用自身

作用:让方法不断地自我循环
在这里插入图片描述

递归的思考步骤(重要)

递归的思考步骤:
1.确定递归函数的参数和返回值

参数:

  • 用到了哪些参数,哪些变量就是参数

返回值:

  • 涉及加减乘除,返回值一般是int,其他一般是void
  • 特殊情况特殊记

2.确定单层递归的逻辑

  • 累计经验
  • 递归一定是从后向前想,由易向难推导,不要钻死胡同!

3.明确终止条件

  • 递归终止条件永远在递归方法最上层(最先判断),在单层递归逻辑之上

递归终止条件的作用

递归一定要有终止条件,否则一定会栈溢出。

在这里插入图片描述
在这里插入图片描述

上图这种递归就是无限的方法栈帧入栈

栈溢出(StackOverFlow)
在这里插入图片描述

结合内存图阐述递归

有一只乌龟,他要跳上n级的台阶,每次只能跳1或2格,有几种跳法?

反着想,不要钻牛角尖

(单层递归逻辑)
跳到最后一个台阶,要么跳1格上去,要么跳2格上去,所以是jump(n-1)+jump(n-2)
……
(递归终止条件)
想到跳第一个台阶,只有一种跳法;跳两个台阶,可以跳一次,也可以跳两次,所以是两种

(参数和返回值)
返回值肯定是int,参数就一个台阶级数n

在这里插入图片描述

内存图(假设n = 5)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

2024年04月编程语言流行度排名

点击查看最新编程语言流行度排名(每月更新) 2024年04月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

记录Xshell使用ed25519公钥免密链接SSH

试了半天,Xshell好像没办法导入linux生成的ssh公钥,因此需要以下步骤实现免密登录 结论,在linux公钥文件中,将客户端生成的ed25519公钥加上去即可(一个公钥单独一行) 1.使用Linux生成秘钥文件(不需要输入私钥密码passphrase)或者直接创建一…

开源简单方便功能强大的Devops工具:Goploy

Goploy:加速您的DevOps旅程,拥抱无缝部署——选择Goploy,让您从繁琐的发布与回滚中解放出来,尽享高效、智能与便捷的自动化部署力量! - 精选真开源,释放新价值。 概览 现在大部分流行的发布工具功能虽然强…

基于GaN的半导体光学放大器SOA

摘要 基于GaN的材料可覆盖很宽的光谱范围,以紫外、紫、蓝、绿和红波发射的激光二极管已经商业化。基于GaN的半导体光学放大器(SOA)具有提高激光二极管输出功率的能力,因此SOA将有很多潜在应用。未来需要利用短波、超快脉冲特性的…

Day5-

Hive 窗口函数 案例 需求:连续三天登陆的用户数据 步骤: -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…

Docker工作流

1.工作流 开发应用编写Dockerfile构建Docker镜像运行Docker容器测试应用发布镜像到Hub迭代更新镜像 2.开发应用 首先你需要创建一个应用,这个应用可以是后端应用或者前端应用,任何语言都可以。 比如:我使用IDEA 创建一个Java后端应用&…

BEV目标检测论文串讲:知识蒸馏(CMKD、TiG-BEV、UniDistill、RadarDistill、CRKD)

大家好,今天和大家介绍五篇知识蒸馏在BEV目标检测中应用的论文。关于知识蒸馏,大家可以看一下这个视频 EfficientML.ai Lecture 9 - Knowledge Distillation (MIT 6.5940, Fall 2023, Zoom),对常见的知识蒸馏方法进行了很好的介绍。 文章目录…

【Linux 驱动基础】设备树驱动

# 前置知识 在图中,树的主干就是系统总线, IIC 控制器、 SPI 控制器等都是接到系统主线上的分支。其中 IIC1 上接了 AT24C02这个 IIC 设备, DTS 文件的主要功能就是按照图所示的结构来描述板子上的设备信息。 1. Device格式 DTS文件格式 …

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL,如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…

RISC-V/ARM mcu OpenOCD 调试架构解析

Risc-v/ARM mcu OpenOCD 调试架构解析 最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上…

LeetCode:331. 验证二叉树的前序序列化(模拟 Java)

目录 331. 验证二叉树的前序序列化 题目描述: 实现代码与解析: 模拟 原理思路: 331. 验证二叉树的前序序列化 题目描述: 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节…

基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Design Name: // …