C语言:函数递归
文章目录前言本文旨在系统性地介绍C语言中的函数递归。一、什么是递归二、递归举例2.1、求n的阶乘2.2、顺序打印一个整数的每一位2.3、求第n个斐波那契数2.3.1、分析和代码实现2.3.2、程序性能分析2.3.3、栈溢出三、递归和循环3.1、求n的阶乘3.2、求第n个斐波那契数3.3、递归和循环的选择前言本文旨在系统性地介绍C语言中的函数递归。一、什么是递归递归是指一个函数在其定义内部调用自身的一种编程技术。它通过将复杂问题分解为规模更小的同类子问题来求解。一个正确的递归函数必须包含两个关键部分终止条件一个能直接返回结果、不再进行递归调用的特定情况如果没有终止条件递归会无限进行下去最终导致栈溢出错误。递归调用函数调用自身且问题的规模比上一次更小逐步逼近终止条件实现“大事化小”。二、递归举例2.1、求n的阶乘阶乘是指所有小于及等于该数的正整数的乘积记作 n!。注0! 1。阶乘递归的核心终止条件是 n 0 返回 1递归公式是 n * Fact(n-1)。每次调用 n 减 1逐步逼近终止条件最终逐层返回计算结果。代码示例#includestdio.h// 递归计算 n 的阶乘intFact(intn){// 1. 终止条件n 0 时0! 1if(n0)return1;// 2. 递归调用n! n * (n-1)!returnn*Fact(n-1);}intmain(){intn0;scanf(%d,n);intretFact(n);printf(%d! %d\n,n,ret);return0;}2.2、顺序打印一个整数的每一位打印整数每一位的递归思路先递归打印前 n-1 位再打印最后一位n % 10。终止条件是 n 变成一位数。这样就能按顺序输出每一位数字。代码示例#includestdio.hvoidPrint(intn){// 1. 终止条件n 是一位数直接打印if(n9){// 2. 递归调用先打印前 n-1 位Print(n/10);}// 3. 打印当前最后一位printf(%d ,n%10);}intmain(){intm0;scanf(%d,m);Print(m);return0;}2.3、求第n个斐波那契数2.3.1、分析和代码实现斐波那契数列前两个数为 0 和 1之后的每个数都是前两个数之和。代码示例#includestdio.hintFib(intn){if(n0)return0;elseif(n1)return1;elsereturnFib(n-1)Fib(n-2);}intmain(){intn0;scanf(%d,n);intretFib(n);printf(%d\n,ret);return0;}2.3.2、程序性能分析代码示例#includestdio.hintcount0;// 全局变量统计 Fib(3) 被重复计算的次数intFib(intn){if(n3)count;// 每次计算 Fib(3) 时计数if(n0)return0;elseif(n1)return1;elsereturnFib(n-1)Fib(n-2);}intmain(){intn0;scanf(%d,n);intretFib(n);printf(%d\n,ret);printf(Fib(3) 被重复计算了 %d 次\n,count);return0;}运行结果n 40102334155Fib(3)被重复计算了39088169次Fib(3) 这一个子问题就被重复计算了 3900 多万次而 Fib(2)、Fib(4) 等子问题的重复次数同样巨大。正是因为这些大量重复的计算让程序的性能很差。2.3.3、栈溢出在C语言中都需要为本次函数调用在内存的栈区申请⼀块内存空间来保存函数调用期间的各种局部变量的值这块空间被称为运行时堆栈或者函数栈帧。函数如果不返回函数对应的栈帧空间就⼀直占用所以如果函数调用中存在递归调用的话每⼀次递归函数调用都会开辟属于自己的栈帧空间直到函数递归不再继续开始回归才逐层释放栈帧空间。如果采用函数递归的方式完成代码递归层次太深就会浪费太多的栈帧空间也可能引起栈溢stack overflow的问题。三、递归和循环3.1、求n的阶乘递归写法intFact(intn){if(n0)return1;elsereturnn*Fact(n-1);}循环写法迭代intFact(intn){intret1;for(inti1;in;i){ret*i;}returnret;}3.2、求第n个斐波那契数递归写法intFib(intn){if(n0)return0;elseif(n1)return1;elsereturnFib(n-1)Fib(n-2);}循环写法迭代intFib(intn){if(n0)return0;if(n1)return1;inta0;// F(n-2)intb1;// F(n-1)intc0;// F(n)for(inti2;in;i){cab;ab;bc;}returnc;}3.3、递归和循环的选择递归用简洁性换效率循环用效率换可读性。选择原则递归深度 100 且无大量冗余计算时优先用递归否则改为循环。

相关新闻

防洪评价项目实战:从数据收集到模型构建全解析

防洪评价项目实战:从数据收集到模型构建全解析

1. 防洪评价项目概述与核心价值 去年参与的长江支流防洪评价项目,让我对这类工程咨询业务有了全新认识。防洪评价绝非简单的报告编写,而是一个融合水文计算、水力建模、工程经验与政策解读的系统工程。整个流程从资料收集到最终评审通过,往往…

2026/8/5 10:48:13 阅读更多 →
Vue状态管理新选择:Pinia核心优势与实践指南

Vue状态管理新选择:Pinia核心优势与实践指南

1. 为什么我们需要重新思考Vue状态管理 2019年,当Vue 3的Composition API首次亮相时,整个Vue生态开始了一场静默的革命。作为长期使用Vuex的开发者,我清楚地记得第一次在大型项目中尝试用Composition API重构时的震撼——那些曾经必须分散在m…

2026/8/5 19:18:06 阅读更多 →
终极显卡性能调优指南:5分钟掌握NVIDIA Profile Inspector完整教程

终极显卡性能调优指南:5分钟掌握NVIDIA Profile Inspector完整教程

终极显卡性能调优指南:5分钟掌握NVIDIA Profile Inspector完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿和画面撕裂而烦恼吗?想知道如何免费解锁NVIDIA…

2026/8/6 4:40:40 阅读更多 →

最新新闻

Unity混合树深度解析:从原理到实战,打造流畅角色动画

Unity混合树深度解析:从原理到实战,打造流畅角色动画

1. 项目概述:为什么混合动画是游戏角色流畅度的灵魂如果你在Unity里做过角色动画,肯定遇到过这种尴尬:角色从静止到奔跑,动作切换得像机器人一样僵硬;或者角色在转向时,上半身和下半身像脱节了一样不协调。…

2026/8/6 5:09:05 阅读更多 →
MySQL权限管理:从基础到实战的安全配置指南

MySQL权限管理:从基础到实战的安全配置指南

1. MySQL权限管理核心概念解析权限管理是MySQL数据库安全体系中最关键的组成部分之一。作为DBA,我经常遇到因为权限配置不当导致的安全事故。MySQL的权限系统采用"基于角色"的设计理念,通过用户账号与权限对象的组合实现精细控制。每个MySQL用…

2026/8/6 5:09:05 阅读更多 →
如何5分钟打造你的专属桌面虚拟伙伴:基于PySide6的完整桌宠系统指南

如何5分钟打造你的专属桌面虚拟伙伴:基于PySide6的完整桌宠系统指南

如何5分钟打造你的专属桌面虚拟伙伴:基于PySide6的完整桌宠系统指南 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否厌倦了单调的电脑桌面?是否曾幻…

2026/8/6 5:09:05 阅读更多 →
3分钟极速上手:chinese-address-generator 让中国地址数据生成变得如此简单

3分钟极速上手:chinese-address-generator 让中国地址数据生成变得如此简单

3分钟极速上手:chinese-address-generator 让中国地址数据生成变得如此简单 【免费下载链接】chinese-address-generator 中国地址生成器 - 三级地址 四级地址 随机生成完整地址 项目地址: https://gitcode.com/gh_mirrors/ch/chinese-address-generator 在软…

2026/8/6 5:09:04 阅读更多 →
3步完成Android Studio中文界面切换:终极完整指南

3步完成Android Studio中文界面切换:终极完整指南

3步完成Android Studio中文界面切换:终极完整指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾经因为Andr…

2026/8/6 5:09:04 阅读更多 →
003010002_Border控件(边框布局)的案例代码解析

003010002_Border控件(边框布局)的案例代码解析

003010002_Border 控件(边框布局)的案例代码解析**摘要:**本文深入解析 WPF 中 UpdateDeviceStatus 方法的完整实现,通过传入背景色、边框色、指示灯颜色和状态文本四个参数,统一更新 Border、Ellipse、TextBlock 控件…

2026/8/6 5:08:04 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →