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

函数的递归

系列文章目录

第五章 分支与循环
第六章 数组
第七章 函数


文章目录

  • 系列文章目录
  • 前言
  • 一、递归是什么?
  • 二、递归举例
  • 二、递归与迭代
  • 总结

前言

本文主要介绍函数的递归。


一、递归是什么?

递归是一种解决问题的办法,递归就是函数自己调用自己的一个过程。用递归的思想去解决问题,本质上就是一种把大的复杂的问题转化成类似的,规模小的问题,直到最后不能再划分的过程。
递归的使用需要两个必要条件:1.递归存在限制条件,当满足改限制条件的时候递归结束。2.每一次递归都会越来越逼近这个限制条件。

二、递归举例

我们可以通过一些例子来理解递归,这里来看一道经典的例题:求n的阶乘,求n的阶乘就是求从1~n的数字相乘的结果,假如有一个求阶乘的函数为a,我们设a(n)为n的阶乘的结果,那么我们可以得到a(n)=na(n-1),以此类推下去,我们不难发现最后会变成1a(0),因此我们可以看出这个递归结束的条件,就是当n等于0的时候,函数返回1,因此我们就可以写出下面的函数:

这里我们不考虑n太大的情况,n太大会存在溢出。
我们可以画图理解一下这其中的过程:

左半边是递归中推递的过程,而右边是回归的过程。

二、递归与迭代

虽然说递归是个很好用的解决问题的方法,但并不是说它就是最好的,就比如我们上面这个例子,虽然用递归写起来很方便,但是一但n是个大数字就会有栈溢出的风险。

c语言的每一次函数调用都需要为函数调用存储在内存的栈区,申请一块内存空间保存变量的值,这块空间一般被称为堆栈或者函数栈帧。
函数不返回,这块空间就不会释放,因此如果我们在采用递归的方法解决问题时,如果递归太深,就会浪费很多空间,甚至引发栈溢出的问题。

所以我们最好使用循环。

inta(intn){inti=0;intret=1;for(i=1;i<=n;i++){ret*=i;}}

因此我们在使用递归的时候要注意可能会引发的效率低下和溢出问题,不应该一股脑使用。


总结

以上就是递归的内容,希望能对大家有所帮助。

http://www.jsqmd.com/news/474194/

相关文章:

  • 游戏库管理困境?这款开源工具让Steam数据掌控变简单
  • IDEA或DataGrip手动插入数据时报错when IDENTITY_INSERT is set to OFF的解决方法
  • 告别编译烦恼:Vcpkg一站式部署Tesseract-OCR C++开发环境(Windows)
  • 如何用ncmdump突破网易云音乐格式限制:从原理到实践
  • Qwen1.5-1.8B GPTQ辅助数据库课程设计:智能ER图生成与SQL优化建议
  • 低显存也能玩转HY-Motion 1.0?优化技巧实测有效
  • Visual Components 5.0 全新升级,重构工业仿真体验,更高效、更智能、更贴近真实!
  • 开源天气平台自主部署全攻略:从数据集成到生产环境构建
  • 语音识别效果对比:清音听真1.7B如何吊打传统工具?
  • 电源变压器+常见拓扑科普:一文搞懂开关电源的核心架构
  • AI Agent 革命下的职业替代地图:哪些行业正在经历“结构性裁员“?
  • 解决多平台资源下载难题的全能工具:网络资源嗅探与批量获取指南
  • EcomGPT-7B基础教程:从start.sh启动到localhost:6006界面使用的完整流程
  • AIGlasses OS Pro 模型微调实战:针对特定数据集的优化训练
  • LangGraph 7. 技能 Skills
  • 【捕获WebSocket】基于CDP与Playwright增强Selenium测试中的实时消息验证
  • 革新资源解析:AssetStudio效率工具开发者必备指南
  • 1-13 T0-T4定时器测量脉冲时间
  • 告别IDA Pro:用Radare2图形化分析SO文件的5个高效技巧(含PEDA联动指南)
  • Vim寄存器实战指南——高效复制粘贴与剪切的秘密武器
  • AudioSeal Pixel Studio从零开始:Streamlit UI源码结构与Ocean Pixel Blue主题解析
  • BGE-Reranker-v2-m3部署成功率低?常见问题排查手册
  • 景石源:黄蜡石厂家的品质与服务优势
  • 规划计时器-备份(自己看)
  • Windows 11 24H2 LTSC 微软商店恢复方案:从功能缺失到生态完整
  • 3步释放显卡潜能:DLSS Swapper从技术原理到场景化应用的优化指南
  • Janus-Pro-7B企业应用:客服图文工单自动摘要+意图识别落地解析
  • 美胸-年美-造相Z-Turbo实战:为古籍修复师林晚生成角色立绘
  • VRRP安全认证:为什么你的网络需要它?(附详细实验配置)
  • Step3-VL-10B-Base模型Node.js后端服务集成教程