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/10/19 14:01:10 阅读更多 →
2026-07-25-02-技术教程-CIMPro孪大师智慧水务数字孪生实战

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

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

2026/10/20 5:13:00 阅读更多 →
从“屎山”到“工程化”:Vibe Coding 的 Harness 九步法

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

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

2026/10/20 9:26:36 阅读更多 →

最新新闻

电力-热力-算力三维协同:DQN强化学习实现数据中心节能优化

电力-热力-算力三维协同:DQN强化学习实现数据中心节能优化

数据中心这行当,这几年最卷的已经不是单纯的算力堆砌,而是“电费账单”和“散热瓶颈”的双重夹击。我陆续做过几个和智能调度相关的项目,其中“电力-热力-算力三维协同”这套思路,配合DQN(Deep Q-Network)深…

2026/10/20 13:13:05 阅读更多 →
Context-Mode 工程实践:跨环节状态传递的分层设计与实现

Context-Mode 工程实践:跨环节状态传递的分层设计与实现

1. 从“上下文模式”说起:一个被低估的工程概念第一次看到“context-mode”这个词,很多人会以为是某个新出的框架或者库。其实不是。它更像是一种设计思路,一种在系统里管理“上下文”这件事的工程模式。你可以在前端状态管理里见到它&#x…

2026/10/20 13:13:05 阅读更多 →
UVa 564 Gaston

UVa 564 Gaston

题目描述 Gaston\texttt{Gaston}Gaston 是一家漫画杂志的员工,他最不喜欢的工作是归档邮件。他设计了一个用棍子和线构成的二叉搜索树系统来存放信件:每根棍子中间挂一封信,左端线下的所有信件编号小于棍子上的信,右端线下的所有信…

2026/10/20 13:13:05 阅读更多 →
MATLAB实现InSAR时序分析:从SLC到毫米级形变图的完整流程

MATLAB实现InSAR时序分析:从SLC到毫米级形变图的完整流程

简介:本资源是一套面向遥感科学与地质工程领域研究者的InSAR时序分析实战教程,聚焦MATLAB平台实现地表形变高精度反演,专为具备SAR基础与MATLAB编程能力的科研人员及工程师设计,助力地质灾害预警、城市沉降监测与冰川变化研究等实…

2026/10/20 13:13:05 阅读更多 →
OpenArm 7 自由度开源机械臂上手指南

OpenArm 7 自由度开源机械臂上手指南

OpenArm 7 自由度开源机械臂上手指南 【免费下载链接】openarm A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments. 项目地址: https://gitcode.com/GitHub_Trending/op/openarm OpenArm 是一款开源的 7 自由度人…

2026/10/20 13:13:05 阅读更多 →
还在本地硬扛大模型?试试 Ollama Cloud,顺便把 OpenCode 也升级了

还在本地硬扛大模型?试试 Ollama Cloud,顺便把 OpenCode 也升级了

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 13:12:04 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →