Datawhale 12月组队学习 leetcode基础 day3 递归

这是一个新的专栏,主要是一些算法的基础,对想要刷leedcode的同学会有一定的帮助,如果在算法学习中遇到了问题,也可以直接评论或者私信博主,一定倾囊相助


进入正题,今天咱们要说的是递归,递归是是很多初学者比较头疼的问题啊,在这篇博客里,我会先阐述一下递归的定义,然后再举几个例子来证明一下,最后咱们练个小题强化一下。

递归算法

    • 递归算法简介
    • 递归算法解题思路
    • 例题
      • 例题1
    • 练习

递归算法简介

首先说一下递归的含义,递归的含义就是,递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。这是百度百科的定义 ,按照我们平时对递归的用法,那就是把一个大的问题一直分解,直到分解成一种简单的情况为止,这种简单的情况就是我们能直接得到结果的情况。下面先举一个例子,我们以阶乘为例,我们平时算阶乘是怎么算呢? 1的阶乘就是1, 2的阶乘就是 2*1 ,3的阶乘就是 3 * 2 *1 ,其实这里就是一个简单的递归 我们求3的阶乘的时候,要知道2的阶乘,用 3×2的阶乘,那么这里2的阶乘是哪里来的呢 是用2×1的阶乘 1的阶乘是哪里来的?是规定 1的阶乘就是1.所以我们才能算出来3的阶乘。那么在计算机的语言里,我们一般是用函数调用自己的方式来实现递归,举个例子:

int func(int n)
{if (n == 1)return 1;else return n * func(n-1);
}

这个就是使用C++语言写一个简单的递归来解决阶乘问题的方法,我们简单分析一下,这个函数为什么能算阶乘?
当n等于1的时候 就返回1,如果n = 2呢?就调用else中的return 返回 n*func(n-1),即为 2×func’(1)也就是1的阶乘 1的阶乘用函数算出来就是1 这里就是2×1 其实这样还不够直观,因为递归的过程分为递推和回归两个过程,这里画个图让大家好理解一下:
在这里插入图片描述

递归算法解题思路

现在我们可以总结一下了,递归在计算机语言中解决问题的步骤是什么?

递推过程:指的是将原问题一层一层地分解为与原问题形式相同、规模更小的子问题,直到达到结束条件时停止,此时返回最底层子问题的解。
回归过程:指的是从最底层子问题的解开始,逆向逐一回归,最终达到递推开始时的原问题,返回原问题的解。

遇到问题时 我们只需要想好其中一个递推的过程和一个回归过程即可,不用全都想透,这样容易乱掉,其实这也是一个重复的过程,套路都是一样的

例题

下面我们练一个递归算法的经典小题

例题1

斐波那契数列

在这里插入图片描述
先说一下斐波那契数列是啥 他是 第0项为0 第1项为1(规定),从第三项开始 每一项都是前两项的和 这么一个数列 比如f(2) = f(0)+f(1)
这时候我们就想一下他的递推过程是啥,回归过程是啥,递归过程就是:比如我们要求 f (6) 的值 f,那么就要知道 f(4)和f(5)的值,f (4) 又要知道f (3) 和f(2)的值,一次类推 知道递推到 f(0)和f(1)的值 我们就可以return了,这里建议大家画图,不清晰一定画个图。
那么代码如何写呢?
在这里插入图片描述
在这里插入图片描述
可以看到,这里时间耗时比较长哈,这是因为在求斐波那契数列的时候有重复,就像我们求f(6),要求f(5)和f(4) f(5)要求f(4)和f(3),这里两个f(4)就重复了,这时我们可以使用记忆化的方式去简化,具体就是算完一个f 就存在数组里一个值,下次遇到已经存进去的值,就可以直接调用了,这里不提供代码,大家可以回去查阅一下。

练习

二叉树最大深度
这里没有学过二叉树的可以去看我的另一篇博客,可以简单了解一下,二叉树简单介绍
在这里插入图片描述
这里简单给个思路 就是二叉树有左子树和右子树 其中更深的就是我们要的答案
代码如下:做完再看嗷

class Solution {
public:int maxDepth(TreeNode* root) {if(root == nullptr)return 0;int hleft = 0;int hright = 0;hleft  = maxDepth(root->left);hright = maxDepth(root->right);return hleft > hright? hleft+1: hright+1;}
};

有啥问题都可以提出来 ,博主有啥问题也恳请斧正,谢谢。

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

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

相关文章

Qt中槽函数在那个线程执行的探索和思考

信号和槽是Qt的核心机制之一,通过该机制大大简化了开发者的开发难度。信号和槽属于观察者模式(本质上是回调函数的应用)。是函数就需要考虑其是在那个线程中执行,本文讨论的就是槽函数在那个线程中执行的问题。 目录 1. connect…

大数据存储技术(3)—— HBase分布式数据库

目录 一、HBase简介 (一)概念 (二)特点 (三)HBase架构 二、HBase原理 (一)读流程 (二)写流程 (三)数据 flush 过程 &#xf…

IS-IS原理与配置3

IS-IS原理与配置 • IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP (ConnectionL…

OSWBB 部署实现

1、OSWatcher (oswbb) 是一个可供用户下载的工具,可以用来抓取操作系统的性能指标。 是一组shell程序,程序中调用: top, vmstat, iostat, mpstat, netstat,and traceroute等os的监控工具 。OSWatcher 的使用是基于 standard licensing terms 并且不需要…

Alibaba分布式事务组件Seata XATCC实战

1. Seata XA模式实战 XA协议最主要的作用是就是定义了RM-TM的交互接口,XA规范除了定义的RM-TM交互的接口(XA Interface)之外,还对两阶段提交协议进行了优化。 1.1 整体机制 在 Seata 定义的分布式事务框架内,利用事务资源(数据…

python3GUI--仿win风格天气By:PyQt5

文章目录 一.前言二.展示1.首页-白色1.首页-白色22.首页-黑色3.天气预报视频4.天气资讯-白色5.天气资讯-黑色6.收藏夹-白色7.收藏夹-黑色8.搜索9.mini-白色10.mini-黑色11.光遇天气 三.心得四.总结五.参考 一&#xff…

编译 pywinhook v1.6.2 的环境设置和步骤

准备做一个鼠标事件响应程序。 查了一下相关python的第三方类库,发现有 pyhook。 一、起源 pyhook 1、pyhook是最早的版本 pyhook支持的python版本比较低,代码在 https://sourceforge.net/projects/pyhook/ 2、之后产生了两个并行版本 pyHook3 和 p…

来聊聊Spring的循环依赖

文章目录 首先了解一下什么是循环依赖简述解决循环依赖全过程通过debug了解Spring解决循环依赖全过程Aservice的创建递归来到Bservice的创建然后BService递归回到了getAservice的doGetBean中故事再次回到Aservice填充BService的步骤 总结成流程图为什么二级就能解决循环依赖问题…

【Qt开发流程】之UDP

概述 UDP (User Datagram Protocol)是一种简单的传输层协议。与TCP不同,UDP不提供可靠的数据传输和错误检测机制。UDP主要用于那些对实时性要求较高、对数据传输可靠性要求较低的应用,如音频、视频、实时游戏等。 UDP使用无连接的数据报传输模式。在传…

如何实现订单自动取消

由于Redis具有过期监听的功能,于是就有人拿它来实现订单超时自动关闭的功能,但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案,总有一种适合你!这些方案并没有绝对的好坏之分,只是适用场景的不大相同。…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特(Bellman-Ford)算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下,寻找从…

Vue3使用了Vite和UnoCSS导致前端项目启动报错:Error:EMFILE:too many open files

一个 Vue3 的项目,用的是 Vite 打包,通过 npm run dev 运行时,遇到了以下错误(尤其是引入了 Element-Plus 后): Error: EMFILE: too many open files,后面是具体的文件路径。。甚至到了 node_mo…

5G工业物联网网关,比4G工业网关强在哪里?

​随着5G技术的广泛应用,越来越多的行业开始探索如何利用5G网络提升效率和创新能力。其中,工业物联网领域是受益最大的领域之一。作为连接物联网设备和网络的关键组件,5G工业物联网网关在这个变革中发挥着至关重要的作用。本文将深入探讨5G工…

指针进阶篇

指针的基本概念: 指针是一个变量,对应内存中唯一的一个地址指针在32位平台下的大小是4字节,在64位平台下是8字节指针是有类型的,指针类型决定该指针的步长,即走一步是多长指针运算:指针-指针表示的是两个指…

赛氪为第五届全球校园人工智能算法精英大赛决赛选手保驾护航

12月10日,以“智青春算未来”为主题的2023年第五届全球校园人工智能算法精英大赛全国总决赛在河海大学江宁校区举行。本次大赛由江苏省人工智能学会主办,自9月份启动以来,共吸引了全国近400所高校的3000多支参赛团队参加。经过校赛、省赛选拔…

nlp与cv的发展

Transformer的出现,促进了更高容量模型的建立,为大模型的出现奠定基础. 🧐大模型通常具有十亿个以上参数(仅供参考) 😮左边的蓝色是CV领域、右下绿色是NLP、右上蓝色是多模态😃基础模型(Foundational Models)首次由Bommasani等人在《Stanford…

HTTP代理服务器脚本录制

1、报错1 target controller is configured to “use recording Controller“ but no such controller exists,ensure_target controller is configured to "use recording -CSDN博客

等等Domino 14.0FP1

大家好,才是真的好。 节奏确实太快了,有时候我深感我也追不上。 以前Notes Domino是三年磨一剑,也就说每三年才发一个大版本,从2019年开始,进行了高频提速,居然一年一个大版本! 周末&#xf…

NAT——网络地址转换

目录 一、概念 二、NAT的分类 1.静态NAT 1.1 静态NAT的配置 1.2 利用eNSP小实验加强对静态NAT的理解 2、动态NAT 三、NAPT——端口映射 四、Easy IP 使用一个公网地址可以让所有人都上公网 一、概念 随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为…

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…