C语言函数递归,详细易懂小白必看
目录一.什么是递归1.递归的思想2.最简单的递归3.栈溢出4.递归的限制条件二.递归举例1.求n的阶乘2.递归的问题一.什么是递归递归是一种解决问题的方法简单理解就是函数自己调用自己1.递归的思想把一个大的复杂的问题层层转化为和原问题相似但是规模较小的子问题来求解直到问题不能再被拆分递归就结束了就像剥洋葱剥开一层还有一层直到剥完就没有了所谓递归思想就是大事化小小事化无。2.最简单的递归我们可以写出世界上最简单的递归#includestdio.h int main() { printf(change word\n); main(); return 0; }程序先是循环打印change word然后异常结束了并且提示我们栈溢出了。3.栈溢出当我们正常程序运行结束代码是0。所以如果递归使用不当就会产生栈溢出的现象。4.递归的限制条件递归在使用时必须满足两个条件(1)递归存在限制条件当满足这个限制条件时递归就不再继续。(2)每次调用后越来越接近这个限制条件不能死循环。二.递归举例1.求n的阶乘一个正整数的阶乘是所有小于及等于该数的正整数的积并且0的阶乘等于1。5的阶乘就是1×2×3×4×5我们可以推到出5的阶乘就是4的阶乘×5依次类推。n0时n! (n-1) !*nn0时n0。我们就可以这样实现代码Fac(int n) { if (n 0) return 1; else return Fac(n - 1) * n; } int main() { //1.求n的阶乘 int n 0; scanf(%d, n); int r Fac(n); printf(%d\n, r); return 0; }假设我们想求3的阶乘首先往Fac函数中传入这个数函数判断是不是为0如果是就返回1不是就返回Fac(n-1)*n也就是说想求出3的阶乘调用函数先求2的阶乘想求出2的阶乘调用函数先求出1的阶乘想求出1的阶乘调用函数先求出0的阶乘 0的阶乘等于1。当第一次调用时n3返回Fac(3-1)*3第二次调用n2 n ! 0 执行返回Fac(2-1)*2第三次调用n 1, n ! 0 执行返回Fac(1-1)*1第四次调用n0 返回1。下面是程序执行流程图片解析第四次返回一个1所以上一次调用函数的结果就是1然后返回1*11第三次返回1Fac 1, 返回1*2 2第二次返回2 Fac 2, 返回2*3 6第1次函数调用返回6把返回值传给r所以3的阶乘就是6递归结束。2.递归的问题在c语言中每次调用函数都在栈区开辟一块空间这块空间被称为函数栈帧函数不返回时函数对应的栈帧空间就一直被占用。函数如果存在递归每次调用自己都会开辟自己的栈帧空间直到递归不再继续开始回归才会逐层释放空间。所以如果采用函数递归的方式完成代码递归层次如果太深就会浪费太多空间可能会导致栈溢出。下面我们可以举个例子 求第n个斐波那契数斐波那契数列从第3项开始每一项都等于前两项之和例如1 1 2 3 5 8 13 21 34 55使用递归来实现时我们创造出Fib()函数当n小于2时return 1当n2时return Fib(n-1) Fib(n-2)int Fib(int n) { if (n 2) return 1; else return Fib(n - 1) Fib(n - 2); } int main() { int n 0; scanf(%d, n); int ret Fib(n); printf(%d\n, ret); return 0; }我们输入40程序卡顿一秒后才给出结果当我们输入50时光标一直在闪烁并且很长时间都没有给出结果。因为每增加一个数计算量就会成指数增加所以效率特别低。如果使用循环的方式来解决计算量就很小了int main() { int a1, b1, c1; int n 0; scanf(%d, n); for (int i 2; i n; i) { c a b; a b; b c; } printf(%d\n, c); return 0; }

相关新闻

LangChain内置工具实战指南:从原理到应用

LangChain内置工具实战指南:从原理到应用

1. LangChain内置工具全景概览LangChain作为当前最热门的AI应用开发框架,其内置工具集一直是开发者快速构建智能应用的核心武器库。我在实际项目中发现,90%的常规需求都可以通过合理组合这些内置工具实现。不同于官方文档按字母排序的罗列方式&#xff0…

2026/7/27 6:02:46 阅读更多 →
2026-07-25-02-技术教程-CIMPro孪大师智慧水务数字孪生实战

2026-07-25-02-技术教程-CIMPro孪大师智慧水务数字孪生实战

CIMPro孪大师7.1实战:30分钟打造智慧水务数字孪生可视化系统从0到1,手把手教你构建专业级水务数字孪生应用一、前言:为什么选择智慧水务作为入门案例 数字孪生技术在智慧水务领域的应用正迎来爆发期。据住建部数据,截至2026年上半…

2026/7/27 6:01:46 阅读更多 →
从“屎山”到“工程化”:Vibe Coding 的 Harness 九步法

从“屎山”到“工程化”:Vibe Coding 的 Harness 九步法

不是 AI 不够强,是你没给它戴上“缰绳”前言:那个让人又爱又恨的 Vibe Coding如果你用过 Vibe Coding,一定经历过这样的心路历程:第一周:哇!AI 太强了!一天出一个功能,一周搭完 MVP&…

2026/7/27 6:01:46 阅读更多 →

最新新闻

点胶镶钻机技术选型指南:精度、速度与稳定性的工程权衡

点胶镶钻机技术选型指南:精度、速度与稳定性的工程权衡

——机器视觉、伺服控制与胶量精度指标的工程解读适用读者: 自动化设备选型工程师、工艺工程师、制造企业技术负责人、智能制造系统集成商,以及对工业机器视觉与精密点胶控制感兴趣的研发人员。引言点胶镶钻机(亦称点胶点钻机)是集…

2026/7/27 6:13:57 阅读更多 →
Blazor组件开发指南:从基础到实战

Blazor组件开发指南:从基础到实战

1. Blazor组件基础概述 在ASP.NET Core Blazor框架中,组件是构建用户界面的基本单元。每个Blazor组件实际上是一个独立的、可重用的UI模块,包含HTML标记和C#逻辑代码。与传统的ASP.NET MVC视图不同,Blazor组件将UI和业务逻辑紧密耦合在一起&a…

2026/7/27 6:12:56 阅读更多 →
C++ Windows进程内存读写实战:从原理到实现内存修改工具

C++ Windows进程内存读写实战:从原理到实现内存修改工具

1. 项目概述:为什么我们要在PC上“动”内存?在编程的世界里,尤其是C/C这类贴近系统底层的语言,直接操作内存是一项既强大又危险的能力。你可能会好奇,一个运行中的程序,它的数据就像被锁在保险箱里&#xf…

2026/7/27 6:12:56 阅读更多 →
BQ27Z846电池管理芯片:阈值恢复与立体温度保护机制深度解析

BQ27Z846电池管理芯片:阈值恢复与立体温度保护机制深度解析

1. 项目概述:深入BQ27Z846的“安全大脑”在锂离子电池的应用世界里,安全从来不是一句空话。无论是你口袋里的智能手机,还是路上飞驰的电动汽车,其内部电池包的安全运行,都依赖于一个沉默的“安全大脑”——电池管理系统…

2026/7/27 6:12:56 阅读更多 →
Python基础语法与实战:从作业到项目开发

Python基础语法与实战:从作业到项目开发

1. Python第二次作业:从基础语法到实战应用作为一门简洁高效的编程语言,Python已经成为计算机科学入门和数据处理领域的标配工具。第二次作业通常意味着学习者已经完成了环境搭建和基础语法学习,开始接触更复杂的编程概念。在这个阶段&#x…

2026/7/27 6:12:56 阅读更多 →
超流体真空理论:量子介质与宇宙规律新解

超流体真空理论:量子介质与宇宙规律新解

1. 超流体真空理论概述在当代理论物理研究的前沿领域,超流体真空理论正逐渐成为解释宇宙基本规律的重要框架。这个理论将真空视为一种具有超流体特性的量子介质,而非传统认知中的"空无一物"。我第一次接触这个概念时,被其惊人的解释…

2026/7/27 6:12:56 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻