408学习之c语言(递归与函数)

今天主要学习了递归与函数的相关内容,下面将我今天所学知识与所写代码分享给大家

递归核心要点
递归三要素

基准条件(明确终止条件)
递归调用(逐步分解问题)
收敛性(确保每次递归都向基准条件靠近)

常见应用场景

分治算法(如归并排序、快速排序)
树形/图形结构遍历
数学计算(阶乘、斐波那契数列等)
使用注意事项
注意:警惕栈溢出(深度过大时需优化)
避免重复计算(可采用记忆化优化)
性能考量(通常比迭代实现效率低)

**

(一)用递归查找数组最大值

**`/* 递归查找数组最大值* @param p1 数组首地址指针* @param sz 当前检查的索引位置* @return 当前子数组的最大值 */
int find_max(int* p1, int sz) {if (sz == 0) {  // 基准条件:只剩首元素时直接返回return p1[sz];}// 递归比较前N-1个元素的最大值与当前元素int prev_max = find_max(p1, sz - 1); return (prev_max >= p1[sz]) ? prev_max : p1[sz];
}int main() {int arr1[] = { 1,2,3,74,3,6 };int sz = sizeof(arr1) / sizeof(arr1[0]);printf("max = %d\n", find_max(arr1, sz-1));return 0;
}`

(二)用递归计算数组元素之和

/* 递归计算数组元素和* @param arr 目标数组* @param l 当前左边界* @param r 右边界(固定)* @return 当前子数组的和 */
int sum_arr(int arr[], int l, int r) {if (l == r) {  // 基准条件:单个元素直接返回return arr[l];}return arr[l] + sum_arr(arr, l + 1, r);  // 当前元素+后续元素和
}int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };int sz = sizeof(arr) / sizeof(arr[0]) - 1;printf("sum = %d\n", sum_arr(arr, 0, sz));return 0;
}

(三)用递归实现冒泡排序

/* 递归版冒泡排序* @param p1 数组指针* @param l 固定左边界(0)* @param r 动态右边界 */
void bubble_arr(int* p1, int l, int r) {if (l == r) return;  // 基准条件:排序完成// 单趟冒泡(异或交换避免临时变量)for (int i = 0; i < r; i++) {if (p1[i] > p1[i + 1]) {p1[i] ^= p1[i + 1];p1[i + 1] ^= p1[i];p1[i] ^= p1[i + 1];}}bubble_arr(p1, l, r - 1);  // 递归处理未排序部分
}int main() {int arr[] = { 1,6,7,3,9,5,8,3,4 };int sz = sizeof(arr) / sizeof(arr[0]) - 1;bubble_arr(arr, 0, sz);// 打印结果for (int i = 0; i <= sz; i++) {printf("%d ", arr[i]);}return 0;
}

(四)用递归求最大公约数

#include<stdio.h>/* 递归求最大公约数* @param a 较大数* @param b 较小数* @return 最大公约数 */
int max_yueshu(int a, int b) {int r = a % b;if (r == 0) return b;  // 基准条件:整除时返回除数return max_yueshu(b, r);  // 递归:转为求b和余数的公约数
}int main() {int a = 48, b = 18;printf("GCD = %d\n", max_yueshu(a, b));return 0;
}

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

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

相关文章

swVBA自学笔记016、Solidworks API Help 帮助文档的(三大版块)

目录1. Namespace (命名空间) 版块2. Interface (接口) 版块3. Members (接口成员) 版块4、总结关系5、如果你感觉上面说的过于简单&#xff0c;请往下看!6、示例链接→SOLIDWORKS API Help 20197、需要注意的是&#xff0c;带“I”的对象表示&#xff1a;接口1. Namespace (命…

通俗易懂地讲解JAVA的BIO、NIO、AIO

理解Java的I/O模型&#xff08;BIO、NIO、AIO&#xff09;对于构建高性能网络应用至关重要 &#x1f9e0; 通俗理解&#xff1a;快递站的故事 想象一个快递站&#xff1a; • BIO&#xff1a;就像快递站为每一个包裹都安排一位专员。专员从接到包裹到处理完&#xff08;签收、…

LabVIEW 泵轮检测系统

在汽车行业&#xff0c;泵轮作为液力变矩器关键部件&#xff0c;其质量检测极为重要。传统手工检测泵轮效率低且误差大&#xff0c;为此构建基于 LabVIEW 与西门子硬件结合的泵轮检测系统。 应用场景 聚焦汽车零部件生产车间&#xff0c;对泵轮总成进行出厂前检测。在液力变矩…

2025年8月月赛 T2 T3

一. 七天假日 T2原思路&#xff1a;直接计算左右括号的数量&#xff0c;然后直接输出他们的差改进思路&#xff1a; 用d值记录截止到当前位置&#xff0c;还需要多少个右括号可以满足非法要求cur&#xff1a;截止到当前位置&#xff0c;已经有多少个右括号sum是右括号位置的前缀…

数据结构----栈的顺序存储(顺序栈)

栈的特点&#xff1a;先进后出栈的操作&#xff1a;用数组进行存储&#xff08;1&#xff09;初始化&#xff1a;//栈 typedef struct {int *data;//指针模拟分配数组int top;//栈“顶”指针 }Stack; //初始化 Stack InitStack(){Stack s;//给数组分配空间s.data (int*)malloc…

React Hooks原理深度解析与高级应用模式

React Hooks原理深度解析与高级应用模式 引言 React Hooks自16.8版本引入以来&#xff0c;彻底改变了我们编写React组件的方式。然而&#xff0c;很多开发者仅仅停留在使用层面&#xff0c;对Hooks的实现原理和高级应用模式了解不深。本文将深入探讨Hooks的工作原理、自定义Hoo…

兼职网|基于SpringBoot和Vue的蜗牛兼职网(源码+数据库+文档)

项目介绍 : SpringbootMavenMybatis PlusVue Element UIMysql 开发的前后端分离的蜗牛兼职网&#xff0c;项目分为管理端和用户端和企业端。 项目演示: 基于SpringBoot和Vue的蜗牛兼职网 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可…

TDengine 聚合函数 LEASTSQUARES 用户手册

LEASTSQUARES 函数用户手册 函数定义 LEASTSQUARES(expr, start_val, step_val)功能说明 LEASTSQUARES() 函数对指定列的数据进行最小二乘法线性拟合&#xff0c;返回拟合直线的斜率&#xff08;slope&#xff09;和截距&#xff08;intercept&#xff09;。该函数基于线性回…

Redis最佳实践——安全与稳定性保障之高可用架构详解

全面详解 Java 中 Redis 在电商应用的高可用架构设计一、高可用架构核心模型 1. 多层级高可用体系 #mermaid-svg-anJ3iQ0ymhr025Jn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-anJ3iQ0ymhr025Jn .error-icon{fil…

ABAP 屏幕在自定义容器写多行文本框

文章目录变量定义容器等逻辑屏幕效果变量定义 CONSTANTS: GC_TEXT_LINE_LENGTH TYPE I VALUE 72. TYPES: TEXT_TABLE_TYPE(GC_TEXT_LINE_LENGTH) TYPE C OCCURS 0. DATA: GV_SPLITTER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER. DATA: GV_CUSTOM_CONTAINER TYPE REF TO CL_…

昆山精密机械公司8个Solidworks共用一台服务器

在当今高度信息化的制造业环境中&#xff0c;昆山精密机械公司面临着如何高效利用SolidWorks这一核心设计工具的现实挑战。随着企业规模的扩大和设计团队的分散&#xff0c;传统的单机授权模式已无法满足协同设计需求。通过引入云飞云共享云桌面解决方案&#xff0c;该公司成功…

【WebSocket✨】入门之旅(三):WebSocket 的实战应用

本篇文章将通过构建一个简单的实时聊天应用&#xff0c;演示如何在前端和后端搭建 WebSocket 系统&#xff0c;完成实时消息传输。通过实战&#xff0c;帮助你更好地理解 WebSocket 在实际项目中的应用。 目录 搭建 WebSocket 服务器WebSocket 客户端实现实时聊天应用示例常见…

CentOS 8-BClinux8.2更换为阿里云镜像源:保姆级教程

还在为 CentOS 8 官方源访问缓慢或不可用而烦恼吗&#xff1f;更换为国内镜像源&#xff0c;如阿里云&#xff0c;可以显著提升软件包下载速度和稳定性。本文将带你一步步完成 CentOS 8 镜像源的更换&#xff0c;让你的系统管理更顺畅。 准备工作 在进行任何系统配置更改之前…

MySQL中InnoDB索引使用与底层原理

MySQL Server端的缓存&#xff08;查询缓存&#xff09;是MySQL Server层的特性&#xff0c;而InnoDB的缓存&#xff08;缓冲池&#xff09;是InnoDB存储引擎层的特性。两者是完全独立的。下面我们来深入探讨这两者以及InnoDB索引的原理。1. MySQL Server层的缓存 - 查询缓存 (…

Python实战:实现监测抖音主播是否开播并录屏

实现这个功能,主要思路是循环检查主播状态 → 开播后获取直播流地址 → 使用FFmpeg录制。下面是一个基本的步骤表格: 步骤 关键行动 常用工具/库 1 获取主播直播间ID或唯一标识 浏览器开发者工具、抓包工具1 2 循环请求抖音API,查询主播直播状态 requests, time 3 解析API响…

init / record / required:让 C# 对象一次成型

标签&#xff1a; init record required with表达式 不可变性 数据模型 DTO 目录1. init 访问器&#xff1a;让不可变对象的创建更灵活1.1. 概念1.1.1. 语法1.1.2. 语义1.2. 设计初衷&#xff1a;解决什么问题&#xff1f;1.3. 使用方法1.3.1. 在对象初始化器中赋值&#xff08…

每天五分钟深度学习:神经网络的权重参数如何初始化

本文重点 在逻辑回归的时候,我们可以将神经网络的权重参数初始化为0(或者同样的值),但是如果我们将神经网络的权重参数初始化为0就会出问题,上节课程我们已经进行了简单的解释,那么既然初始化为0不行,神经网络该如何进行参数初始化呢?神经网络的权重参数初始化是模型训…

[论文阅读] 告别“数量为王”:双轨道会议模型+LS,破解AI时代学术交流困局

告别“数量为王”&#xff1a;双轨道会议模型LS&#xff0c;破解AI时代学术交流困局 论文信息信息类别具体内容论文原标题From Passive to Participatory: How Liberating Structures Can Revolutionize Our Conferences主要作者及机构1. Daniel Russo&#xff08;丹麦奥尔堡大…

趣味学solana(介绍)

你就是那个关键的“守门员”&#xff01; 为了方便理解Solana&#xff0c;我们把Solana 想象成一个巨大的、24小时不停歇的足球联赛。成千上万的足球运动员&#xff08;用户&#xff09;在不停地传球、射门&#xff08;发送交易&#xff09;&#xff0c;而整个比赛的结果必须被…

分布式事务性能优化:从故障现场到方案落地的实战手记(三)

第三部分&#xff1a;混合场景攻坚——从“单点优化”到“系统协同” 有些性能问题并非单一原因导致&#xff0c;而是锁竞争与事务耗时共同作用的结果。以下2个案例&#xff0c;展示综合性优化策略。 案例7&#xff1a;基金申购的“TCC性能陷阱”——从全量预留到增量确认 故障…