递归/递归函数

不明白为什么很多学校要从“汉诺塔”讲起,这玩意是真的绕。

递归(函数)的概念:

调用自身来求解问题

不要过多考虑递归细节,宏观层面上的理解递归就行

ps:总不能一直调用下去吧?必须要有一个边界

递归的关键:

1. 递归的结束条件(边界)

2. 递归函数的功能

3. 常识(推导公式)

递归的基本框架:

func(n){if(n满足递归结束条件){//结束处理···}else{//一些处理,生成新的参数new_n···func(new_n);   }}

递归示例:

1. 求阶乘

函数声明 int jiecheng(int n)

a. 确定功能,jiecheng(n)表示求解n!,返回计算结果。

b. 确定边界,当n=1时,n!结果为1,这是已知的。

c. 常识:n! = n*(n-1)!

int jiecheng(int n) {if (n == 1) { //递归边界(结束条件)return 1;}else {return n * jiecheng(n - 1); //jiecheng()就是一个求阶乘的函数,直接拿过来用,不细究其它东西}
}

当然,边界不是唯一的,你也可以把边界设置为 n=3 , n!的结果为6,这是已知的

int jiecheng(int n) {if (n == 3) { //递归边界(结束条件)return 6; //此时,这个函数只能计算大于等于3的数的阶乘}else {return n * jiecheng(n - 1); //递归函数的功能      jiecheng(n - 1)就是(n-1)!的结果,n!=n*(n-1)!}
}

2. 求最值

int findmax(int arr[],int l,int r) {if (l == r) {//边界:片段中只有一个数//结果:自己就是最大的return arr[l];}else if ((r-l) == 1) {//边界:片段中有两个数//结果:两者比较return arr[l] > arr[r] ? arr[l] : arr[r];}else {//分成左右两部分int mid = (l + r) / 2;//计算左半部分的最大值int left_max = findmax(arr, l, mid); //findmax()就是一个求最值的函数,我直接拿过来用就行,不考虑其它//计算右半部分的最大值int right_max = findmax(arr, mid + 1, r);//结果return left_max > right_max ? left_max : right_max;}
}

函数声明 int findmax(int arr[], int l, int r);

a. 确定功能,findmax(arr, l, r)表示求解 数组arr的l到r范围内,最大的元素,返回结果。

b. 确定边界,当l==r时,只有一个数,显然arr[l]就是最大的。

                      当r==l+1时,只有两个数,进行一次比较,就可以知道谁最大

c. 常识:对于一个数组arr = [1,9,3,4,8],将其拆分为左右两个数组arr_l = [1,9,3],arr_r = [4,8]

              设数组arr的最大元素为A,arr_l的最大元素为B,arr_r的最大元素为C

              则A = max(B,C)

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

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

相关文章

国际标准引脚,宽范围工作温度–40℃ 到 105℃,3W 1.5KVDC 隔离单输出 DC/DC 电源模块 ——TPL-3W系列

TPL-3W系列是一款额定功率为3W的隔离产品,国际标准引脚,宽范围工作温度–40℃ 到 105℃,在此温度范围内都可以稳定输出3W,并且效率非常高,高达88%,同时负载调整率非常低,对于有输出电压精度有要…

失落的方舟台服封号的解决方法 怎么避免封号?

失落的方舟台服封号的解决方法 怎么避免封号? 失落的方舟这款游戏是由Smile Gate研发的MMORPG游戏,这款游戏将于5月30日正式开服。游戏采用虚幻3引擎,为玩家们提供了丰富的游戏玩法与精美的游戏画面。游戏的背景是在中世纪,玩家们…

JS将小数转化为整数

在JavaScript中,有多种方法可以将一个值转化为整数。以下是一些常用的方法: Number.parseInt() 或 parseInt()parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数(基数介于2和36之间)。如果第一个字符不能被转换为数字,parseInt() 会返回 NaN。 let numString…

网络原理-------TCP协议

文章目录 TCP协议TCP协议段格式TCP原理确认应答机制 (安全机制)超时重传机制 (安全机制)连接管理机制 (安全机制)滑动窗口 (效率机制)流量控制 (安全机制)拥塞控制 (安全机制)延迟应答 (效率机制)捎带应答 (效率机制) 基于TCP的应用层协议 TCP协议 TCP, 即 Transmission Contr…

TypeScript 枚举

什么是 TypeScript 枚举? 简单来说,枚举是一种用于命名一组常量的数据类型。在 TypeScript 中,枚举允许我们定义一个命名的常量集合,并为这些常量分配相关的数值。通过枚举,我们可以为一组相关的值提供一个友好的名字…

运维开发之Linux机器码

一、介绍 Linux机器码指的是在Linux操作系统上运行的程序的二进制代码,也称为机器码或目标代码。Linux机器码是对源代码进行编译或汇编后得到的结果,它是一系列由0和1组成的指令,用于直接在计算机硬件上执行。 在Linux中,机器码可以是由C、C++、汇编语言或其他编程语言编…

基于 LLM 的群聊知识助手:茴香豆简介

茴香豆是一个基于大型语言模型(LLM)的群聊知识助手,旨在为用户提供智能化的对话体验和问题解答。它通过精心设计的三阶段处理流程(预处理、拒答、响应)来应对群聊场景的复杂性,确保既能提供有用的信息&…

java解压缩ZIP文件

封装了一个类,类的代码如下 public class Decompress {//String zipFilePath "/sdcard/archive.zip";//String destinationPath "/sdcard/extracted_files";//ZipUtils.unzip(zipFilePath, destinationPath);public static void unzip(Strin…

Go 语言中程序是怎么编译的?

在当今快速发展的软件开发领域,Go 语言(又称 Golang)已经成为了开发高性能应用程序的热门选择。由 Google 开发并在 2009 年公开发布,Go 语言因其简洁的语法、出色的并发支持以及优秀的性能而受到广泛欢迎。尽管 Go 的语法相对简单…

C# TcpClient

TcpClient 自己封装的话,还是比较麻烦的,可以基于线程,也可以基于异步写,最好的办法是网上找个插件,我发现一个插件还是非常好用的:STTech.BytesIO.Tcp 下面是这个插件作者的帖子,有兴趣的可以…

Mac连接虚拟机(Linux系统)

1.确定虚拟机的IP地址 ifconfig //终端命令,查询ip地址 sudo apt install net-tools 安装完成后再次执行 ifconfig: 2.安装SSH(加密远程登录协议) (1).安装OpenSSH服务器软件包: sudo apt-get install openssh-ser…

监控易助力实现智能工厂数字化升级项目案例

随着工业4.0和智能制造的浪潮席卷全球,包头铝业(以下简称“包铝”)积极响应行业变革,启动了智能工厂升级项目。该项目旨在通过数字化转型,实现IT基础设施、动环设施以及物联网设施的互联互通,进而提升生产效…

小心审核失败,网上申请流量卡千万要注意这些!

最近有朋友私信小编:在网上申请的流量卡,信息填写完成提交审核呢,是不是就能发卡呢? 答案:不一定。 网上申请流量卡时,填写申请信息并提交审核这只是网报程序成功,接下来还要运营商审核&#…

python面向对象编程OOP

面向对象编程(Object-Oriented Programming,简称OOP)是Python编程中一种重要的编程范式。OOP通过使用类和对象来组织代码,使代码更易于管理和维护。下面是一些Python面向对象编程的关键概念和示例: 1. 类和对象 **类…

【惊艳视界】Perfectly Clear Workbench:让您的图像瞬间焕发生机!

在数字化时代,图像已成为我们生活中不可或缺的一部分。无论是摄影爱好者,还是专业设计师,都渴望拥有一款能够轻松提升图像质量的神奇工具。今天,我们为您带来了一款图像清晰处理软件的佼佼者——Perfectly Clear Workbench&#x…

最新!!2024上半年软考【高级】系统分析师 综合知识真题解析

2024上半年软考考试已经结束了,为大家整理了网友回忆版的系统分析师选择题真题及答案,总共30道题。 上半年考试的宝子们可以对答案预估分数!准备下半年考的宝子可以提前把握考试知识点和出题方向,说不定会遇到相同考点的题目&…

【全开源】知识付费问答社区(FastAdmin+ThinkPHP)

此系统是一款基于FastAdmin和ThinkPHP开发的知识付费问答社区系统,提供全部前后台无加密源代码,拥有强大的付费提问、付费阅读、付费查看、付费邀请、全文搜索等功能模块,其整合了强大的标签模块和专区模块,让问题和文章更好的归类…

【WP|2】WordPress 高级函数和方法解析

在之前的文章中,我们讨论了 WordPress 的一些常用函数和方法。这篇文章将进一步探讨一些高级函数和方法,这些函数和方法能够帮助开发者更加精细地控制和定制 WordPress 网站,以实现更复杂和高级的功能。 一、高级主题函数 1. add_theme_supp…

python办公自动化——(三)替换PPT文档中图形数据-折线图

数据替换前 数据替换后 代码实现 # 单折线 pathE:\\13 python 下侧双x轴折线图\\ prs Presentation(path双x轴测试-01.pptx) data_timepd.read_excel(path"数据.xlsx",sheet_name单折线)ppt_9prs.slides…

DSP6657 GPIO学习

0 设备 创龙C6657Artix-7工业评估板 SEED-XDS560v2 1 实现功能 控制评估底板 LED1 、 LED2 、 LED3 每隔 0.5s 将状态同时翻转一次。 采用查询的方式控制评估版的KEY2控制LED2亮灭。 2 代码 2.1 GPIO驱动 2.1.1 c66x_gpio.c /* Compiler Header files */ #include …