C语言 函数的嵌套与递归 调用

news2025/1/11 14:20:58

本文 我们来说函数的嵌套调用和递归调用

在很多大型项目中 我们肯定不可能将所有逻辑都写在一个函数中 肯定要按功能拆解成多个特定的功能函数
函数并不允许嵌套调用,但是 允许在逻辑代码中嵌套调用
所谓函数嵌套调用 就是在一个函数中调用另一个函数,而被调用的函数 又去调用其他函数

下图 是一个函数多次互相嵌套调用的结构
在这里插入图片描述
首先进入函数 main 执行函数代码 然后调用 Fun1 函数 执行 Fun1 执行逻辑代码 走到 调用 Fun2 处 走进 Fun2
执行完毕后 回到 Fun1 剩余部分 继续执行代码
Fun1 执行完毕 回到 main 执行完毕后返回

然后 我们来说函数的递归调用

我们 有一个 从前有座山 山里有座庙 庙里有个老和尚 老和尚给小和尚讲故事 讲从前有座山 山里有个庙 …

反复讲故事 就可以理解为 反复调用自己
计算机中 一个过程 反复调用自己 它就定义为一个递归过程

C语言 支持递归 递归是一种特殊的嵌套调用

我们将递归函数 分为 直接递归调用 和间接递归调用

之间递归调用是指 在方法中之间写明逻辑 执行到某个点 调用自己
例如

int accumulation() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    accumulation();
}

我们在 accumulation中直接调用 accumulation 自身 这就是直接调用

然后

int accumulation() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    yml();
}

int yml() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    accumulation();
}

accumulation中 调用了 yml
而 yml 中 又会调用 accumulation
多个函数 互相调用形成闭环 就是 间接递归调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS编辑器下使用MFC完成研究生管理系统设计

背景: (一)实验目的 通过该实验,使学生掌握windows程序设计的基本方法。掌握学籍管理的基本内容,熟练应用数据库技术和通用组件,实现研究生信息的增、删、改、查功能。通过处理过程对计算机软件系统工作原…

【Linux进程间通信(六)】深入理解 System V IPC

(一)引入 (二)IPC 命名空间 (三)ipc_ips结构体 (四)ipc_id_ary结构体 (五)kern_ipc_perm结构体 (六)操作系统对IPC资源是如何管理…

mybatis:Spring junit 测试报错:Failed to load ApplicationContext

Spring junit 测试报错:Failed to load ApplicationContext 解决方法,修改mybatis版本,版本过高导致无法加载依赖

NVIDIA Omniverse Cloud API支持数字孪生开发,可解决复杂AI问题 | 最新快讯

在全球范围内,价值超过 50 万亿美元的重工业市场,正在竞相实现数字化。 基于此,为帮助数字孪生技术更好地赋能千行百业,AI 企业 NVIDIA 在架构底层算力的同时,也搭建了 NVIDIA AI Enterprise 和 Omniverse 两大平台。 …

PDF转word转ppt软件

下载地址:PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件,电脑自带的又要开会员啥的很麻烦,现在分享这款软件直接激活就可以免费使用了,超级好用,喜欢的可以下载

【不使用深度学习框架】多层感知机实现手写Minist数据集识别

手写Minist识别是一个非常经典的问题,其数据集共有70000张28*28像素的图片,其中60000张作为训练集,剩下的10000张作为测试集,每一张图片都表示了一个手写数字,经过了灰度处理。 本文延续前面文章提到的多层感知机&…

五一 Llama 3 超级课堂 大完结

首先很感谢上海人工智能实验室和机智流等相关举办单位组织的这个活动,在Llama3发布不多时就让我们可以体验到大模型的进步,回顾整个活动,从内容上看是相当用心的。从A100的提供使用到大模型部署,微调,Agent功能应用和数…

网贷大数据查询要怎么保证准确性?

相信现在不少人都听说过什么是网贷大数据,但还有很多人都会将它跟征信混为一谈,其实两者有本质上的区别,那网贷大数据查询要怎么保证准确性呢?本文将为大家总结几点,感兴趣的朋友不妨去看看。 想要保证网贷大数据查询的准确度&am…

Mamba结构的Demo源码解读

文章目录 前言一、mamba结构构建辅助函数解读1、dataclass方法解读2、Norm归一化LayerNormRMSNormRMSNorm源码 3、nn.Parameter方法解读 二、mamba原理二、mamba模型构建1、主函数入口源码解读2、Mamba类源码解读 三、ResidualBlock的mamba结构源码解读四、MambaBlock构成Resid…

【四、性能测试】性能测试基础与几个重要的概念

你好,我是山茶,一个95后在职程序员。也是一个目标跟 1000 程序员探索出 AI 测试 副业之路的 bro,欢迎跟我一起沟通交流! 一、什么是性能测试? 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来…

Clion STM32CubeMX 项目

系列文章目录 前言 最后修改 2024 年 4 月 16 日 操作系统:Windows / Linux / macOS 所需工具 STM32CubeMX、GNU ARM 工具链 项目格式: CMake 兼容配置: OpenOCD 运行与调试/嵌入式 GDB 服务器 对于以 STM32 板卡为目标的嵌入式项目&#xf…

渗透之sql盲注(时间/boolean盲注)

sql盲注:sql盲注意思是我们并不能在web页面中看到具体的信息,我们只能通过输入的语句的真假来判断。从而拿到我们想要的信息。 我们通常使用ascii值来进行盲注。 目录 手动注入: 时间盲注: 布尔盲注: python脚本注…

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…

C# 和 Qt 相比的一些优势

C# 和 Qt 都是流行的软件开发工具,它们各自具有不同的优势,适用于不同的开发场景。以下是 C# 和 Qt 相比的一些优势。相比之下,Qt 也有其独特的优势,特别是在跨平台 GUI 应用程序开发方面。然而,C# 的这些优势使得它在…

又发现一个ai生成音乐的网站-heymusic

网址 https://heymusic.ai/ 尴尬,不挂梯子能登录进来,但是谷歌账号注册不了,刷新了几遍也没注册上。 看了下价格,应该不是免费的,所以也没了试用的兴趣。 我也不想用别的邮箱注册了,所以只能简单的水一…

DenseCLIP环境配置

直接看raoyongming/DenseCLIP: [CVPR 2022] DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting (github.com) 但这里的环境配置可能和现在不太适配,自己配了好久没弄好 后面尝试了另外的版本的(但这个版本少了一些内容&#…

【MM32F3270火龙果】点亮led

文章目录 前言GPIO的工作模式一、有哪些工作模式?1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、操作GPIO点亮led2.1 初始化gpio2.2 写gpio 三、示例代码总结 前言 本文将介绍如何在MM32F3270火龙果微控制器上使用Keil开发环境点亮LED。MM32F3270火龙…

【R语言】生存分析模型

生存分析模型是用于研究时间至某个事件发生的概率的统计模型。这个事件可以是死亡、疾病复发、治疗失败等。生存分析模型旨在解决在研究时间相关数据时的挑战,例如右侧截尾(右侧截尾表示未观察到的事件发生,例如研究结束时还未发生事件&#…

大语言模型入门介绍(附赠书)

自2022年底ChatGPT的震撼上线以来,大语言模型技术迅速在学术界和工业界引起了广泛关注,标志着人工智能技术的又一次重要跃进。作为当前人工智能领域的前沿技术之一,代表了机器学习模型在规模和复杂性上的显著进步。它们通常由深度神经网络构成…

17.接口自动化学习-日志

1.日志输出渠道 &#xff08;1&#xff09;文件格式 xx.log &#xff08;2&#xff09;控制台输出 2.日志级别 debug<info<warnning<error<critical 3.代码实现 from utils.handle_path import log_path import logging import datetime def logger(fileLogTr…