leetcode分类刷题:如何更好地理解递归

文章目录

  • 概念含义
  • 递归三要素
  • 递归算法的编程模型
  • 递归问题分类
  • 递归vs循环(迭代)
  • 参考文献

参考知乎上递归下的一个高赞回答,觉得写的非常好,挑选有助于自己理解的内容进行简单总结。

概念含义

1、递归(Recursion)是指在函数的定义中调用函数自身的方法;其包含了两个意思:,这正是递归思想的精华所在。
2、有去(递去)有回(归来)—— :递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决;:若干个子问题会有一个明确的临界点,从这个临界点开始,原路返回到原点,原问题解决。
递归过程示意图
递归过程示意图

递归三要素

1、递归终止条件:递归有一个明确的临界点,一旦到达这个临界点,就不用继续递去而是开始归来;换句话说,该临界点就是一种简单情境,可以防止无限递归。
2、递归终止时的处理办法:在递归临界点的简单情境下,应该直接给出问题的答案
3、提取重复的逻辑,缩小问题规模,即递归函数内部的操作:抽象出一个干净利落的重复的逻辑

递归算法的编程模型

1、在递去的过程中解决问题

function recursion(大规模)if end_condition:  # 明确的递归终止条件end  # 简单情景else:  # 在将问题转换为子问题的每一步,解决该步中剩余部分的问题solve  # 递去recursion(小规模)  # 递到最深处后,不断地归来

2、在归来的过程中解决问题

function recursion(大规模)if end_condition:  # 明确的递归终止条件end  # 简单情景else:  # 在将问题转换为子问题的每一步,解决该步中剩余部分的问题recursion(小规模)  # 递去solve  # 归来

递归问题分类

1、问题的定义是按递归定义的:斐波纳契数列、阶乘、杨辉三角的取值、回文字符串的判断、字符串全排列、二分查找
2、问题的解法是递归的:汉诺塔问题
3、数据结构是递归的:链表、二叉树等

递归vs循环(迭代)

1、递归通常很直白地描述了一个问题的求解过程,递归的使用能让代码变得简单清晰,逻辑变得易懂,因此也是最容易被想到解决方式;循环其实和递归具有相同的特性,即做重复任务,但有时使用循环的算法并不会那么清晰地描述解决问题步骤,可能会把逻辑隐藏起来——目前来说可能递归的方法还是代码写的太少,所以总是倾向于按照循环迭代的代码写,导致递归的方法特别不熟练
2、在实际开发中,因为函数调用的开销,递归常常会带来性能问题,特别是在求解规模不确定的情况下;而循环因为没有函数调用开销,所以循环效率会比递归高
3、递归求解方式和循环求解方式往往可以互换,也就是说,如果用到递归的地方可以很方便使用循环替换,而不影响程序的阅读,那么替换成循环往往是好的
4、递归实现转换成非递归:建立“堆栈”来保存这些内容以便代替系统栈;把对递归的调用转变为对循环处理

参考文献

1.对于递归有没有什么好的理解方法?

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

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

相关文章

白水三佳电脑ERP部署

安装宝塔面板,有这个方便很多,可以省下3天的环境部署时间。 移动端, 先取移动版的压缩包,上传至服务器/www/wwwroot/目录下面,直接解压到当前目录后会生成/www/wwwroot/m/的目录,移动版就在这里面了。以下…

智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台

一、方案背景 我国江河湖泊众多,水系发达。伴随着经济社会快速发展,水生态水环境问题成为群众最关注的民生议题之一。一些河流开发利用已接近甚至超出水环境承载能力,一些地区废污水排放量居高不下,一些地方侵占河道、围垦湖泊等…

【C++】哈希的应用 -- 位图

文章目录 一、位图的概念二、位图的实现三、库中的 bitset四、位图的应用五、哈希切割 一、位图的概念 我们以一道面试题来引入位图的概念: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中 我…

Linux远程管理工具

Linux远程管理服务器多基于 SSH 协议。本节给大家介绍 2 种常见的基于 SSH 协议的远程管理工具,分别是 PuTTY 和 SecureCRT。 在使用远程管理工具之前,应先设置宿主机 Windows 与虚拟机 Linux 能够连通。 这里要注意 VMware 的网卡设置,Lin…

贝锐花生壳+Fooocus,快速自建可远程访问的SDXL,平替Midjourney

Midjourney、stable diffusion两款AI绘图工具是最近这段时间的热点。不过,事无完美,他们各有一些优缺点。 例如:stable diffusion虽然开源可私有化部署,但操作相对复杂,需要设置各类参数;Midjourney虽然简单…

Excel 5s内导入20w条简单数据(不使用多线程)

文章目录 Excel 5s内导入20w条数据1. 生成20w条数据1.1 使用Excel 宏生成20w条数据1.2 生成成功 2. ExecutorType:批量操作执行器类型2.1 ExecutorType.SIMPLE2.2 ExecutorType.BATCH2.3 ExecutorType.REUSE 3. 20w条数据直接插入数据库3.1 使用ExecutorType.SIMPLE…

数学建模——最大流问题(配合例子说明)

目录 一、最大流有关的概念 例1 1、容量网络的定义 2、符号设置 3、建立模型 3.1 每条边的容量限制 3.2 平衡条件 3.3 网络的总流量 4、网络最大流数学模型 5、计算 二、最小费用流 例2 【符号说明】 【建立模型】 (1)各条边的流量限制 &a…

Python处理PDF——PyMuPDF的安装与使用详解

​​​​​​​ 1、PyMuPDF简介 1. 介绍 在介绍PyMuPDF之前,先来了解一下MuPDF,从命名形式中就可以看出,PyMuPDF是MuPDF的Python接口形式。 MuPDF MuPDF 是一个轻量级的 PDF、XPS和电子书查看器。MuPDF 由软件库、命令行工具和各种…

Stable Diffusion原理

一、Diffusion扩散理论 1.1、 Diffusion Model(扩散模型) Diffusion扩散模型分为两个阶段:前向过程 反向过程 前向过程:不断往输入图片中添加高斯噪声来破坏图像反向过程:使用一系列马尔可夫链逐步将噪声还原为原始…

BAT032:批量替换当前目录下文件的部分字符

引严:编写批处理程序,实现批量替换当前目录下文件的部分字符。 一、新建Windows批处理文件 参考博客: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件,点击【编辑】。…

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站, 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…

BAT033:批量删除文件特定字符及特定字符之后的字符

引言:编写批处理程序,实现批量删除文件特定字符及特定字符之后的字符。 一、新建Windows批处理文件 参考博客: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件,点击【…

16-spring AOP核心对象的创建

文章目录 1. aop的几个重要概念2. aop bean definition3. AspectJPointcutAdvisor4.AopConfigUtils5.AnnotationAwareAspectJAutoProxyCreator6. 循环依赖 1. aop的几个重要概念 参考官方解释:https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-…

全连接网络参数Xavier初始化

1.梯度消失 考虑下图的神经网络,在使用梯度下降法迭代更新W_ki和W_ij时,它们的梯度方向间有什么关系? 它们的梯度关系如下: 从上述两个式子我们大致可以看出,损失函数L关于第h层参数的梯度由两部分组成:…

VMware中安装centos无网络,配置教程

VMware虚拟机中装了centos7,装完之后一直无法联网,网上的教程都试了也没用,这里记录一下最后的解决方案。 VMware配置 1. 点击 虚拟机-》设置 windows配置 打开电脑网络连接 共享选项选中我们虚拟机网络中包含的VMnet8的 VMnet8网络就自动变成这样了&a…

关于利用webase-front节点控制台一键导出的java项目解析

搭建区块链系统和管理平台分别用的的fisco、webase。 关于我们在利用java开发DApp(去中心化引用),与区块链系统交互,可以用: 1.webase前置服务给开发者提供的api:我们在搭建好fisco链之后,在搭一个webase-front服务,我…

基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale …

线性代数-Python-02:矩阵的基本运算 - 手写Matrix及numpy中的用法

文章目录 一、代码仓库二、矩阵的基本运算2.1 矩阵的加法2.2 矩阵的数量乘法2.3 矩阵和向量的乘法2.4 矩阵和矩阵的乘法2.5 矩阵的转置 三、手写Matrix代码Matrix.pymain_matrix.pymain_numpy_matrix.py 一、代码仓库 https://github.com/Chufeng-Jiang/Python-Linear-Algebra-…

计算机网络学习笔记(四):网络层(待更新)

目录 4.1 IP地址、子网划分、合并超网 4.1.1 IP地址、子网掩码、网关 4.1.2 IP地址的编址方法1:IP地址分类(A~E类地址、保留的IP地址) 4.1.4 IP地址的编址方法2:子网划分(等长、变长) 4.1.5 IP地址的编…

基于Python实现的一款轻量、强大、好用的视频处理软件,可缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕等

Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具,而不是像 Davinci Resolve、Adobe Premiere 那样专业的、复杂的庞然大物。Quick Cut 可以满足普通人一般的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段…