C 语言学习历程:(第七章)函数递归・在自我调用中探寻问题的精妙解法 📅 发布时间:2026/7/5 11:27:36 👁️ 浏览次数: 第七章函数递归文章目录第七章函数递归1. 求 n 的阶乘2. 顺序打印一个整数的每一位3. 求 n 的 k 次方4. 递归与迭代4.1 求第 n 个斐波那契数总结函数递归就是函数自己调用自己。其思想是将一个大型复杂问题层层转化为一个与原问题相似但规模较小的子问题来求解直到子问题不能再被拆分递归就结束。递归中的递就是递推的意思归就是回归的意思。限制条件递归存在限制条件当满足这个限制条件的时候递归便不再继续每次递归调用之后越来越接近这个限制条件1. 求 n 的阶乘一个正整数的阶乘是所有小于及等于该数的正整数的积并且0的阶乘为1#define_CRT_SECURE_NO_WARNINGS#includestdio.h//阶乘//定义阶乘函数intfactorial(intn){if(n0){return1;}returnfactorial(n-1)*n;}intmain(){//方法一循环//int num 1;//for (int i 1; i 10; i)//{// num * i;//}//方法二 递归逻辑如下// 0! 1// 1! 1 0! * 1// 2! 1 * 2 1! * 2// 3! 1 * 2 * 3 2! * 3// 4! 1 * 2 * 3 * 4 3! * 4// n! (n-1)! * nintn0;scanf(%d,n);printf(%d,factorial(n));return0;}2. 顺序打印一个整数的每一位输入一个整数。按照顺序打印整数的每一位例如输入1234 输出 1 2 3 4#define_CRT_SECURE_NO_WARNINGS#includestdio.h//顺序打印一个整数的每一位// 1 : 1// 12 : 1 2 print_num(1) 2// 123 : 1 2 3 print_num(12) 3// 1234 : 1 2 3 4 print_num(123) 4// n : print_num(n / 10) n % 10voidprint_num(intnum){//方法一if(num/100){printf(%d,num);//个位数返回本身}else{print_num(num/10);//递归调用去掉个位数printf( %d,num%10);}//方法二//if (num 9) //不是个位则进行递归//{// print_num(num / 10);//递归调用去掉个位数//}//printf(%d , num % 10);//if语句执行完还会打印数字而不是else的关系}intmain(){intnum0;scanf(%d,num);print_num(num);//定义打印每一位数字的函数return0;}3. 求 n 的 k 次方输入一个整数 n 递归实现 n 的 k 次方//递归实现n的k次方// 2^1 2// 2^2 2^1 *2// 2^3 2^2 *2// n^k n^(k-1) * n//求n的k次方函数intexponent(intn,intk){if(k1){returnn;//如果是1次方返回本身}returnexponent(n,k-1)*n;}intmain(){intn0;intk0;scanf(%d%d,n,k);printf(%d,exponent(n,k));return0;}4. 递归与迭代在C语言中每一次函数调用都需要为本次函数调用在内存的栈区申请一块内存空间来保存函数调用期间的各种局部变量的值这块空间被称为运行时堆栈或者函数栈帧。函数不返回函数对应的栈帧空间就⼀直占⽤所以如果函数调⽤中存在递归调⽤的话每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间直到函数递归不再继续开始回归才逐层释放栈帧空间。 所以如果采⽤函数递归的⽅式完成代码递归层次太深就会浪费太多的栈帧空间也可能引起栈溢出的问题。当不使用递归通常就是迭代的方式通常是循环4.1 求第 n 个斐波那契数计算第n个斐波那契数这个程序便不适合用递归求解#define_CRT_SECURE_NO_WARNINGS#includestdio.h//递归和迭代//求第n个斐波那契数//1 1 2 3 5 8 13 21 ...前两个数相加等于后面的数字//第n个斐波那契数字f(n) f(n-2) f(n-1)//递归实现斐波那契会有大量重复计算效率低下intf_add(intnum){if(num1||num2){return1;}else{returnf_add(num-2)f_add(num-1);}}intmain(){intnum0;//定义变量接受第几个斐波那契数字scanf(%d,num);f_add(num);//调用函数printf(%d\n,f_add(num));//打印结果return0;}迭代实现#define_CRT_SECURE_NO_WARNINGS#includestdio.h//迭代实现intmain(){intleft_11;//最左边第一个数intleft_21;//最左边第二个数intnum0;//定义变量接受第几个斐波那契数字intn1;//定义变量计算数字初始值为1scanf(%d,num);for(inti0;inum-2;i){nleft_1left_2;//计算当前数left_1left_2;//更新左边第一个数left_2n;//更新左边第二个数}printf(%d\n,n);//打印结果return0;}第八章操作符详解总结本文是在鹏哥 C 语言集训营学习过程中所记录的学习笔记梳理了核心知识点同时也记录了本人实操验证的代码案例供后续学习复盘使用。
Qwen2-VL-2B-Instruct惊艳案例:‘赛博朋克夜景街拍‘文本精准匹配摄影师私有图库 Qwen2-VL-2B-Instruct惊艳案例:赛博朋克夜景街拍文本精准匹配摄影师私有图库 1. 项目背景与价值 作为一名专业摄影师,我深知管理庞大图库的痛苦。成千上万张照片中,想要找到"那张霓虹灯下的雨夜街景"或"带有赛博朋克氛围的城… 2026/7/5 11:27:19
FLUX.1-dev创意广告生成:基于PS插件开发的自动化设计流程 FLUX.1-dev创意广告生成:基于PS插件开发的自动化设计流程 做电商的朋友,最近是不是又被广告素材给难住了? 每天要出几十张不同尺寸的广告图,从社交媒体到电商平台,从手机端到PC端,每个渠道都要适配。设计… 2026/7/5 11:27:19
幻境·流金惊艳效果:15步i2L生成vs传统50步SDXL的PSNR对比分析 幻境流金惊艳效果:15步i2L生成vs传统50步SDXL的PSNR对比分析 1. 引言:当速度与画质不再对立 想象一下,你有一个绝妙的创意画面在脑海中闪现,但生成一张高清大图需要等待几分钟甚至更久。在等待的过程中,灵感可能已经… 2026/5/17 3:44:43
基于DQN算法的主动悬架强化学习控制实践 1. 项目概述:基于DQN算法的主动悬架强化学习控制在车辆工程领域,主动悬架系统一直是提升驾乘舒适性和操控稳定性的关键技术。传统PID控制方法在面对复杂路况时往往表现受限,而强化学习(Reinforcement Learning)为解决这… 2026/7/5 11:27:23
Python实现AI伦理审查:自动化偏见检测与公平性评估 1. 项目概述:Python驱动的AI伦理审查工具链 在医疗诊断、金融风控、招聘评估等关键领域,AI模型的一个微小偏见可能导致现实世界中的系统性歧视。去年某跨国企业就曾因招聘算法对女性求职者降分而面临集体诉讼,最终赔偿高达数百万美元。这类事… 2026/7/5 11:27:23
MemPalace:AI记忆系统的四层架构与Python实现 1. MemPalace 项目概述:重新定义AI记忆系统 当我第一次接触MemPalace这个项目时,最让我震惊的是它对"AI记忆"这个概念的全新诠释。大多数开发者(包括曾经的我)都简单地把AI记忆等同于向量数据库存储,而MemPa… 2026/7/5 11:27:23
百度Unlimited-OCR:基于参考滑动窗口的长文档解析模型部署与测试 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个百度开源的 OCR 项目:Unlimited-OCR。如果你经常需要处理扫描版 PDF、长图、或者图文混排的文档… 2026/7/5 11:23:22
Python量化交易入门:从数据获取到策略回测的完整技术实现 在实际金融科技和投资领域,量化交易早已不是华尔街的专属。对于具备编程能力的开发者而言,利用Python等工具构建自己的交易策略,进行数据分析和回测,正成为一种可行的技术探索路径。这并非鼓励盲目入市,而是将量化交易… 2026/7/5 11:21:22
AI开发工具接入第三方模型:以DeepSeek API配置为例 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在实际的 AI 开发与集成工作中,我们经常遇到一个核心需求:如何在一个已经习惯的、功能强大的开发工具或 AI 助… 2026/7/5 11:19:21
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36