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

C语言—简单认知函数递归

C语言—简单认知函数递归1. 什么是递归在C语⾔中递归就是函数⾃⼰调⽤⾃⼰。#includestdio.hintmain(){printf(hehe\n);main();//main函数中⼜调⽤了main函数return0;}上述就是⼀个简单的递归程序只不过上⾯的递归只是为了演⽰递归的基本形式不是为了解决问题代码最终也会陷⼊死递归导致栈溢出。1.1 递归的思想把⼀个⼤型复杂问题层层转化为⼀个与原问题相似但规模较⼩的⼦问题来求解直到⼦问题不能再被拆分递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。1.2 递归的限制条件递归在书写的时候有2个必要条件递归存在限制条件当满⾜这个限制条件的时候递归便不再继续。每次递归调⽤之后越来越接近这个限制条件。2. 递归的限制条件2.1 举例1求n的阶乘⼀个正整数的阶乘是所有⼩于及等于该数的正整数的积并且0的阶乘为1。⾃然数n的阶乘写作n!。分析和代码实现我们知道n的阶乘的公式 n n ∗ (n − 1)!举例 5! 5*4*3*2*1 4! 4*3*2*1 所以:5! 5*4!这样的思路就是把⼀个较⼤的问题转换为⼀个与原问题相似但规模较⼩的问题来求解的。我们可以写出函数Fact求n的阶乘假设Fact(n)就是求n的阶乘那么Fact(n-1)就是求n-1的阶乘函数如下#includestdio.hintFact(intn){if(n0)return1;elsereturnn*Fact(n-1);}intmain(){intn0;scanf(%d,n);intretFact(n);printf(%d\n,ret);return0;}2.2 举例2顺序打印⼀个整数的每⼀位输⼊⼀个整数m按照顺序打印整数的每⼀位。输⼊1234 输出1 2 3 4 输⼊520 输出5 2 0分析和代码实现如果n是⼀位数n的每⼀位就是n⾃⼰。n是超过1位数的话就得拆分每⼀位。1234%10就能得到4然后1234/10得到123这就相当于去掉了4 然后继续对123%10就得到了3再除10去掉3以此类推 不断的 %10 和 /10 操作直到依次得到 4 3 2 1我们发现⼀个数字的最低位是最容易得到的通过%10就能得到那我们假设想写⼀个函数Print来打印n的每⼀位如下表⽰Print(n) 如果n是1234那表⽰为 Print(1234) //打印1234的每⼀位 其中1234中的4可以通过%10得到那么 Print(1234)就可以拆分为两步 1. Print(1234/10) //打印123的每⼀位 2. printf(1234%10) //打印4 完成上述2步那就完成了1234每⼀位的打印 那么Print(123)⼜可以拆分为Print(123/10) printf(123%10)直到被打印的数字变成⼀位数的时候就不需要再拆分递归结束。那么代码完成也就⽐较清楚voidPrint(intn){if(n9){Print(n/10);}printf(%d ,n%10);}intmain(){intm0;scanf(%d,m);Print(m);return0;}3. 递归的举例递归是⼀种很好的编程技巧但是和很多技巧⼀样也是可能被误⽤的就像举例1⼀样看到推导的公式很容易就被写成递归的形式intFact(intn){if(n0)return1;elsereturnn*Fact(n-1);}Fact函数是可以产⽣正确的结果但是在递归函数调⽤的过程中涉及⼀些运⾏时的开销。所以如果不想使⽤递归就得想其他的办法通常就是迭代的⽅式通常就是循环的⽅式。⽐如计算 n 的阶乘也是可以产⽣1~n的数字累计乘在⼀起的。intFact(intn){inti0;intret1;for(i1;in;i){ret*i;}returnret;}上述代码是能够完成任务并且效率是⽐递归的⽅式更好的。事实上我们看到的许多问题是以递归的形式进⾏解释的这只是因为它⽐⾮递归的形式更加清晰但是这些问题的迭代实现往往⽐递归实现效率更⾼。当⼀个问题⾮常复杂难以使⽤迭代的⽅式实现时此时递归实现的简洁性便可以补偿它所带来的运⾏时开销。

相关文章:

C语言—简单认知函数递归

C语言—简单认知函数递归 1. 什么是递归 在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main函数return 0; }上述就是⼀个简单的递归程序&#xff0c;只不过上⾯的递归只是为…...

Scan2CAD:三维扫描到CAD模型的智能翻译官如何革新工业设计

Scan2CAD&#xff1a;三维扫描到CAD模型的智能翻译官如何革新工业设计 【免费下载链接】Scan2CAD [CVPR19] Dataset and code used in the research project Scan2CAD: Learning CAD Model Alignment in RGB-D Scans 项目地址: https://gitcode.com/gh_mirrors/sc/Scan2CAD …...

3步彻底解决键盘冲突:Hitboxer让你的游戏操作如丝般顺滑

3步彻底解决键盘冲突&#xff1a;Hitboxer让你的游戏操作如丝般顺滑 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 还在为格斗游戏中的连招失败而懊恼&#xff1f;FPS游戏里转身延迟让你错失良机&#xff1f;M…...

【YOLO26实战全攻略】16——模型训练技巧:从Epoch设定到断点续训的全方位指南

摘要:在YOLO26目标检测模型的实战训练中,多数开发者会遭遇训练中断、过拟合、指标震荡、收敛缓慢等核心痛点,这些问题的根源往往在于对Epoch、学习率、早停机制、断点续训等关键训练参数的理解不深、配置不当。本文基于Ultralytics官方文档(截至2026年4月)、500+次工业级实…...

Zotero SciPDF插件终极指南:5分钟实现学术文献自动下载

Zotero SciPDF插件终极指南&#xff1a;5分钟实现学术文献自动下载 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 如果你是一名研究人员、学生或学术工作者&#xf…...

新手开发者首次使用Taotoken从注册到调用成功全流程体验记录

新手开发者首次使用Taotoken从注册到调用成功全流程体验记录 1. 注册与初始准备 作为第一次接触大模型API的新手开发者&#xff0c;我选择从Taotoken平台开始尝试。注册流程非常直观&#xff0c;只需提供邮箱和设置密码即可完成基础账户创建。登录后控制台布局清晰&#xff0…...

终极免费词典API指南:如何为你的应用添加13种语言支持

终极免费词典API指南&#xff1a;如何为你的应用添加13种语言支持 【免费下载链接】freeDictionaryAPI There was no free Dictionary API on the web when I wanted one for my friend, so I created one. 项目地址: https://gitcode.com/gh_mirrors/fr/freeDictionaryAPI …...

AutoDL云服务器PyCharm远程连接保姆级教程:从镜像选择到环境配置避坑全记录

AutoDL云服务器PyCharm远程连接实战指南&#xff1a;从零搭建到高效开发全流程 第一次尝试用PyCharm连接AutoDL云服务器时&#xff0c;我盯着SSH配置界面里那些陌生的参数发呆了半小时。端口号填哪个&#xff1f;解释器路径怎么写&#xff1f;为什么conda环境激活不了&#xff…...

M5Stamp Pico:自带耐热外壳的ESP32开发板解析

1. M5Stamp Pico模块概述&#xff1a;自带耐热外壳的ESP32开发板在物联网开发领域&#xff0c;ESP32系列模块因其出色的性价比和丰富的功能而广受欢迎。但大多数模块都需要用户自行设计外壳保护&#xff0c;而M5Stack推出的M5Stamp Pico则带来了一个创新解决方案——自带可拆卸…...

从理论到代码:PMSM无感FOC中滑模观测器(SMO)的C语言实现与调参避坑指南

永磁同步电机无感FOC实战&#xff1a;滑模观测器在嵌入式系统中的工程化实现 永磁同步电机&#xff08;PMSM&#xff09;的无传感器控制一直是工业驱动领域的热点技术。滑模观测器&#xff08;SMO&#xff09;因其强鲁棒性和实现简单&#xff0c;成为无感FOC方案中的主流选择。…...

如何快速提升Windows系统性能:Windows Defender Remover完全指南

如何快速提升Windows系统性能&#xff1a;Windows Defender Remover完全指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_m…...

别再只盯着CLIP了!从BLIP到InstructBLIP,手把手教你选对VLM模型做自己的AI应用

别再只盯着CLIP了&#xff01;从BLIP到InstructBLIP&#xff0c;手把手教你选对VLM模型做自己的AI应用 当ChatGPT掀起大语言模型浪潮时&#xff0c;视觉语言模型&#xff08;VLM&#xff09;正在悄然重塑人机交互的边界。想象一下&#xff1a;电商平台能自动为百万商品生成卖点…...

解放你的电脑!JiYuTrainer:极域电子教室破解方案完全指南 [特殊字符]

解放你的电脑&#xff01;JiYuTrainer&#xff1a;极域电子教室破解方案完全指南 &#x1f680; 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在学校机房中被极域电子教…...

保姆级教程:用stress-ng给你的Linux服务器做个全面‘体检’(CPU/内存/磁盘IO)

服务器性能体检指南&#xff1a;用stress-ng深度评估Linux系统健康状态 当服务器像人体一样需要定期体检时&#xff0c;运维工程师就是它的"全科医生"。不同于简单的资源监控&#xff0c;压力测试能揭示系统在极端条件下的真实表现——就像跑步机测试能发现潜在心脏问…...

ComfyUI-Impact-Pack:解决AI图像细节模糊的终极方案

ComfyUI-Impact-Pack&#xff1a;解决AI图像细节模糊的终极方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: https://gi…...

3分钟解决外语障碍:Translumo实时屏幕翻译终极指南

3分钟解决外语障碍&#xff1a;Translumo实时屏幕翻译终极指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 想象一下这…...

Tree-of-Thought实战:让Agent学会多想几步,复杂任务准确率翻倍

上个月我在做一个多步骤Agent的时候&#xff0c;遇到了一个让我头疼的问题&#xff1a; Agent在做简单任务时表现不错&#xff0c;但一旦任务需要多步推理——比如"帮我比较3个竞品的优缺点&#xff0c;然后推荐最合适的方案&#xff0c;再写一封邮件"——它就各种翻…...

从光纤到网线:手把手拆解ADOP万兆电口模块里的CDR芯片选型与配置

从光纤到网线&#xff1a;手把手拆解ADOP万兆电口模块里的CDR芯片选型与配置 在数据中心升级或企业网络改造项目中&#xff0c;工程师们常面临一个关键选择&#xff1a;如何在不更换现有Cat6a/Cat7铜缆布线的前提下&#xff0c;实现从千兆到万兆的平滑过渡&#xff1f;ADOP推出…...

Hive事务表从入门到放弃?手把手教你配置ACID表并避坑(基于ORC存储)

Hive事务表实战指南&#xff1a;从配置到性能优化的完整解决方案 为什么我们需要Hive事务表&#xff1f; 在传统数据仓库架构中&#xff0c;Hive一直被视为"只读"的分析工具&#xff0c;直到事务表的出现打破了这一局限。想象这样一个场景&#xff1a;财务部门发现上…...

终极解决方案:如何用OBS多平台推流插件实现一次编码多平台直播

终极解决方案&#xff1a;如何用OBS多平台推流插件实现一次编码多平台直播 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 如果你正在为同时向多个直播平台推流而烦恼&#xff0c;那么o…...

孤舟笔记 并发篇二十三 线程池是如何实现线程复用的?Worker循环取任务的秘密远比你想象的精巧

文章目录一、先说结论&#xff1a;线程复用的核心机制二、Worker&#xff1a;线程和任务的"合体"三、runWorker()&#xff1a;复用的核心循环四、getTask()&#xff1a;从队列取下一个任务五、完整流程&#xff1a;从提交到复用六、对比&#xff1a;不使用线程池 vs …...

别再瞎调颜色了!手把手教你用Python+OpenCV搞定ISP中的CCM矩阵(附代码)

从传感器到人眼&#xff1a;Python实战CCM矩阵计算与图像色彩校正 色彩校正矩阵&#xff08;CCM&#xff09;是图像信号处理&#xff08;ISP&#xff09;流水线中至关重要的环节。想象一下&#xff0c;当你用不同品牌的手机拍摄同一片蓝天时&#xff0c;为什么有些照片偏紫&…...

5分钟解锁:LinkSwift网盘直链解析的终极效率秘籍

5分钟解锁&#xff1a;LinkSwift网盘直链解析的终极效率秘籍 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

Claude Code 接入 DeepSeek-V4-Pro

如果我们想使用 claude 的agent框架&#xff0c;但是受制于A社的管控&#xff0c;可以使用此方法。理论上可以在claude 的agent框架中使用任何模型。 1. 下载clauld code curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del in…...

如何快速打造智能机器狗:openDogV2开源四足机器人完整指南

如何快速打造智能机器狗&#xff1a;openDogV2开源四足机器人完整指南 【免费下载链接】openDogV2 项目地址: https://gitcode.com/gh_mirrors/op/openDogV2 想要亲手制作一只能够自主行走、感知环境的智能机械伙伴吗&#xff1f;openDogV2开源四足机器人项目为你提供了…...

Obsidian Excel插件:构建企业级知识库结构化数据管理的完整方案

Obsidian Excel插件&#xff1a;构建企业级知识库结构化数据管理的完整方案 【免费下载链接】obsidian-excel 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-excel 在知识管理领域&#xff0c;Obsidian以其强大的双向链接和本地优先理念赢得了技术爱好者的青睐…...

世界模型EP01:DreamZeroDreamDojo 世界模型与机器人智能的新范式

发布时间:2026年3月18日 06:30 世界模型这个概念,从2024年偶尔听到,到如今已经非常热门。延续之前的三个系列科普,Robot Data EP10 Robot Data第一季访谈总结,和Human Data 总结篇:Human Data—The “Key” to Robot Data,以及Robot Foundation model系列,2026年上半年…...

多模态检索增强技术在图像生成中的应用与优化

1. 技术背景与核心价值 在视觉内容创作领域&#xff0c;如何实现精准可控的图像生成一直是行业痛点。传统文本到图像&#xff08;Text-to-Image&#xff09;模型虽然能够根据文字描述生成图像&#xff0c;但在处理复杂场景时常常出现细节偏差、语义误解等问题。多模态检索增强技…...

LLM PDF Translator:基于版面分析与大模型的文档翻译工具部署与实战

1. 项目概述与核心价值 最近在折腾一个挺有意思的项目&#xff0c;叫 LLM PDF Translator。简单来说&#xff0c;它就是一个能帮你把整本PDF文档&#xff0c;从一种语言翻译成另一种语言&#xff0c;并且 最大程度保留原始排版格式 的工具。这玩意儿解决了一个很实际的痛点&a…...

机器人控制中心开发指南:Electron串口通信与数据可视化实践

1. 项目概述&#xff1a;一个桌面端的机器人控制中心最近在机器人开发社区里&#xff0c;一个名为hicoldcat/openclaw-control-center-desktop的项目引起了我的注意。乍一看这个名字&#xff0c;你可能会觉得它只是一个普通的桌面应用&#xff0c;但当你深入进去&#xff0c;会…...