基础算法--理解递归

news2024/9/20 14:40:00

理解递归

在这里插入图片描述

递归的两个特点

  • 调用自身
  • 结束条件
举个从小就听过的例子:
1. 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:
2. 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:
3. 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:
4. 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:
4.“太困了不讲了”,于是都回去睡觉了。
3. 于是都回去睡觉了。
2. 于是都回去睡觉了。
1. 于是都回去睡觉了。

我晕,怎么讲了那么多故事,其实不然,我用不同颜色标记处来了每一层的对应关系,
很明显地看出颜色从头开始往中间逐渐变化,然后到一定程度(我们称之为递归的边界或是结束条件)就从内二外的层层返回。
这就是递归
类似于剥洋葱,一层套着一层,直到掰到最里层。

接着看下面的例子:
在这里插入图片描述
这句吓得我抱起了抱着抱着抱着我的小鲤鱼的我的我的我如果从字面意义上看可能看不出是什么意思,那么我们可以通过代码来实现同样的效果:

void digui(int n){
	cout << "抱着";
	if(!n){
		cout << "我的小鲤鱼";
	}
	else{
		digui(n - 1);
	}  
	cout << "的我";
	return;
}
int main(){
	cout << "吓得我抱起了";
	digui(2);
	return 0; 
}

在这里插入图片描述

计算n的阶乘

迭代版
n = 7
result = 1

for i in range(1, 7):
    res = result * i
    print(res)

1的阶乘等于1
在这里插入图片描述
2的阶乘等 1的阶乘 乘以2 等于2
在这里插入图片描述
3的阶乘等于 2的阶乘 乘以3 等于6
在这里插入图片描述
依次类推,就可以求出4,5,n的阶乘
在这里插入图片描述
我们在设计迭代算法的时候,使用的正向思维的方式
在这里插入图片描述

递归的思维正好相反,属于逆向思维

在这里插入图片描述
我们想计算5的阶乘
在这里插入图片描述
这个时候多么希望已经计算好了4的阶乘
在这里插入图片描述
然后在4的阶乘的基础上 乘以5 就是5的阶乘
在这里插入图片描述
但是4的阶乘我们不知道,继续向前希望求出3的阶乘 乘以4 得到4的阶乘
在这里插入图片描述
依此类推,不断向前推出到0的阶乘,1的阶乘等于1
在这里插入图片描述
这样后面所有的阶乘结果,都可以算出来。
在这里插入图片描述
这就是递归的逆向思维方式
在这里插入图片描述

即从 最终想要的答案出发
逐步向前寻找 上一层的答案
并且 用他们构造 当前层的答案
直到找到最深的那一层,问题的答案足够简单
递归执行便开始返回,并将每层的答案依次填上

def factorial(n):
    if n == 0:
        return 1
    tmp = factorial(n - 1)
    return tmp * n

迭代和递归的区别
在这里插入图片描述

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

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

相关文章

unity scene场景调整好后让game窗口的视角与scene相同

调整scene中场景视角 选中相机 然后 如果要实现相反的功能 即scene的视角与game的一样则 选中相机

目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv8介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练6.1 方式一6.2 方式二6.3 针对其他任务 七、模型验证八、模型测试九、模型转换9.1 转onnx9.1.1 方式一 9.2 转tensorRT9.2.1 trtexec9.2.2 代码转换9.2.3 推理代码 一…

问道管理:炸裂上涨,“神奇力量”!Mate 60 Pro+来了

今天上午&#xff0c;同花顺软件刚增添的光刻机板块大爆发&#xff0c;光刻胶板块也大涨。早年两年的光伏&#xff0c;到本年上半年的光模块&#xff0c;再到最近的光刻胶、光刻机&#xff0c;股民评论&#xff1a;“光”&#xff0c;充溢奇特的力气。 上午收盘&#xff0c;上…

SQLite加密解密

Android 微信备份 微信聊天记录导出(2020新版) Android数据库加解密逆向分析&#xff08;三&#xff09;——微信数据库密码破解 微备份 论坛讨论 解密sqlite db数据库文件 转自windwos 安装 pysqlcipher3 下载 pysqlcipher 去https://pypi.org/search/?qpysqlcipher&…

Python并发编程实战,用多线程、多进程、多协程加速程序运行

文章目录 1. 并发 & 并行 、同步 & 异步1.1 并发 & 并行并发 Concurrency并行 Parallelism 1.2 同步 & 异步同步 Synchronous异步 Asynchronous 2. CPU密集型计算 & IO密集型计算2.1 CPU密集型&#xff08;CPU-bound&#xff09;2.2 IO密集型&#xff08;I…

智慧工地可视化解决方案-智慧工地源码

智慧工地是指运用信息化手段&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析&#xff0c;提供过程趋势预测及专家预案&#xff0c;实现工程…

Redis 7 第九讲 微服务集成Redis 应用篇

Jedis 理论 Jedis是redis的java版本的客户端实现&#xff0c;使用Jedis提供的Java API对Redis进行操作&#xff0c;是Redis官方推崇的方式&#xff1b;并且&#xff0c;使用Jedis提供的对Redis的支持也最为灵活、全面&#xff1b;不足之处&#xff0c;就是编码复杂度较高。 …

js创建一个按钮添加到body中,设置宽度100px,高度30px,按钮文字一键登录,并为其添加点击事件

要为按钮添加点击事件&#xff0c;你可以使用 JavaScript 的 addEventListener 方法。以下是一个示例代码&#xff1a; // 创建按钮元素 var button document.createElement("button");// 设置按钮的宽度和高度 button.style.width "100px"; button.sty…

借助开源表单设计器,让办公流程化更顺畅!

什么样的软件可以实现办公流程化发展&#xff1f;这是很多粉丝朋友问到的问题&#xff0c;其实&#xff0c;作为低代码技术平台服务商&#xff0c;建议大家了解下开源表单设计器&#xff0c;它在当前数字化转型发展的潮流中具有可观的利用价值&#xff0c;可以助力不同行业实现…

Nginx 本地部署服务

nginx 部署服务 一、下载二、解压三、文件替换四、浏览器中输入五、离线部署瓦片服务 一、下载 可以到官网下载&#xff0c;官方网址&#xff1a;https://nginx.org/也可以用我发的包 二、解压 三、文件替换 解压打开后文件&#xff0c;双击 nginx.exe 浏览器输入 localhost…

RunnerGo:性能测试领域的领跑者

随着软件行业的飞速发展&#xff0c;性能测试已经成为确保应用程序稳定性和可靠性的重要环节。RunnerGo&#xff0c;作为一款由国内开发者基于Go语言自主研发的性能压测工具&#xff0c;正在受到越来越多人的关注。本文将详细介绍RunnerGo的优势、应用场景以及与其他测试工具的…

ABB REF615C-D HCFFAEAGABC2BAA1XD控制继电器

多功能保护&#xff1a;REF615C-D 继电器具备多种保护功能&#xff0c;包括过流、短路、地故障、欠频、过频、欠电压、过电压等&#xff0c;可用于监测和保护电力系统中的设备。 通信能力&#xff1a;该继电器支持通信协议&#xff0c;如IEC 61850、Modbus等&#xff0c;使其能…

DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

​2023年8月16日~18日&#xff0c;第14届中国数据库技术大会&#xff08;DTCC 2023&#xff09;于北京隆重召开&#xff0c;拓数派受邀参与本次大会&#xff0c;PieCloudDB 技术专家邱培峰在大会做了《云原生虚拟数仓 PieCloudDB ETL 方案设计与实现》的主题演讲&#xff0c;详…

uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

1&#xff0c;在manifest.json文件中的mp-weixin 节点下&#xff0c;添加&#xff1a;"__usePrivacyCheck__": true 2&#xff0c;在需要的页面配置隐私保护弹窗&#xff0c;或者直接写到首页也可以 <uni-popup ref"popusAuthorization" type"cen…

VS编译.cu文件源文件无法打开matrix.h和mex.h问题

配置好cu和VS相关库文件后CUDA程序仍然报错&#xff1a;无法打开matrix.h和mex.h&#xff0c;解决办法&#xff1a; &#xff08;1&#xff09;这两个头文件是matlab中的&#xff0c;可能无法直接在VS中调用&#xff0c;可以通过添加外部依赖项的方法将matlab中的头文件的文件路…

如何将Word转换为PDF?了解PDF转换器的功能有多强大

现在问你“如何将Word转换为PDF”?你会使用什么方法?是使用word文档自带转换工具&#xff0c;还是使用转换器进行文件格式转换?其实无论使用哪种方法&#xff0c;只要能顺利将文件的格式进行转换&#xff0c;不出错&#xff0c;并且能节省时间&#xff0c;那就是好的方法。今…

高频知识汇总 |【计算机网络】面试题汇总(万字长文通俗易懂)

我之前也已经在写了好几篇高频知识点汇总&#xff0c;简要介绍一下&#xff0c;有需要的同学可以点进去先收藏&#xff0c;之后用到时可以看一看。如果有帮助的话&#xff0c;希望大家给个赞&#xff0c;给个收藏&#xff01;有疑问的也可以在评论区留言讨论&#xff0c;能帮的…

STMCUBEMX_IIC_DMA_AT24C64读取和写入

STMCUBEMX_IIC_DMA_AT24C64读取和写入 说明&#xff1a; 1、此例程只是从硬件IIC升级到DMA读写&#xff0c;因为暂时存储的掉电不丢失数据不多&#xff0c;一页就可以够用&#xff0c;不用担心跨页读写的问题 2、使用DMA后&#xff0c;程序确实是变快了&#xff0c;但是也要注意…

Python的pandas库来实现将Excel文件转换为JSON格式的操作

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

024 - STM32学习笔记 - LTDC与DMA2D显示屏

024- STM32学习笔记 - LTDC控制液晶屏 在学习如何控制液晶屏之前&#xff0c;先了解一下显示屏的分类&#xff0c;按照目前市场上存在的各种屏幕材质&#xff0c;主要分为CRT阴极射线管显示屏、LCD液晶显示屏、LED显示屏、OLED显示屏&#xff0c;在F429的开发板上&#xff0c;…