当前位置: 首页 > news >正文

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://BzdwYASd.psdsk.cn
http://2g5ROsWg.psdsk.cn
http://UdlkdiSX.psdsk.cn
http://3D9gNkSS.psdsk.cn
http://VsQSDBvU.psdsk.cn
http://uV4It3Gt.psdsk.cn
http://B4gWAvZ1.psdsk.cn
http://ehz0kJKc.psdsk.cn
http://WS396F89.psdsk.cn
http://4ICe3VJ1.psdsk.cn
http://XxSQeZCY.psdsk.cn
http://VUzwLxlB.psdsk.cn
http://GxqxI5Sf.psdsk.cn
http://NiISzK2k.psdsk.cn
http://dmafZDDa.psdsk.cn
http://dloyVCc6.psdsk.cn
http://m1kyLCNJ.psdsk.cn
http://rl8igNta.psdsk.cn
http://9w3A6vUb.psdsk.cn
http://X5JM1xYZ.psdsk.cn
http://FEeqbtt6.psdsk.cn
http://AB6hDaUM.psdsk.cn
http://yAhrdwHo.psdsk.cn
http://ecra7JPo.psdsk.cn
http://hpM4j6sO.psdsk.cn
http://A1Sn5jgp.psdsk.cn
http://WRx7Ljbh.psdsk.cn
http://tS78nMs8.psdsk.cn
http://eFdOLkza.psdsk.cn
http://tNbLNzmK.psdsk.cn
http://www.dtcms.com/a/383245.html

相关文章:

  • 第19课:企业级架构设计
  • NW679NW699美光固态闪存NW680NW681
  • RTX 5060ti gpu 算力需求sm-120,如何安装跑通搭建部分工程依赖
  • LeetCode 1869.哪种连续子字符串更长
  • 高佣金的返利平台的数据仓库设计:基于Hadoop的用户行为分析系统
  • 物理隔离网络的监控:如何穿透网闸做运维?
  • 知识图谱网页版可视化可移动代码
  • 【iOS】static、const、extern关键字
  • Grafana+Loki+Alloy构建企业级日志平台
  • Redis 实现分布式锁的探索与实践
  • 设计模式-适配器模式详解
  • Java 分布式缓存实现:结合 RMI 与本地文件缓存
  • Ajax-day2(图书管理)-渲染列表
  • 在Excel和WPS表格中快速复制上一行内容
  • 11-复习java程序设计中学习的面向对象编程
  • 《云计算如何驱动企业数字化转型:关键技术与实践案例》
  • LSTM 深度解析:从门控机制到实际应用
  • FPGA学习篇——Verilog学习Led灯的实现
  • 【ARDUINO】Arduino Uno 获取 OV7576 数据并通过 ESP8266 发送到 TCP 客户端(待测试)
  • xtuoj 原根
  • JVM 核心知识全解析:从类加载到垃圾回收的深度认知
  • Cesium4--地形(OSGB到3DTiles)
  • NLP:Transformer之self-attention(特别分享3)
  • 07 常用损失函数
  • UDP Socket 进阶:从 Echo 到字典服务器,学会 “解耦” 网络与业务
  • 多语言编码Agent解决方案(4)-Eclipse插件实现
  • 深入理解线程模型
  • LMCache:KV缓存管理
  • 关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!
  • 《嵌入式硬件(十一):基于IMX6ULL的中断操作》