2025_1_27 C语言内存,递归,汉诺塔问题

news2025/1/31 6:35:40

1.c程序在内存中的布局 在这里插入图片描述

  1. 代码段(Code Segment)
    位置:通常位于内存的最低地址。
    用途:存储程序的可执行指令。
    特点:只读,防止程序运行时被修改。
  2. 数据段(Data Segment)
    位置:紧随代码段之后。
    用途
    存储全局变量和静态变量。
    包含初始化的全局变量和静态变量(已初始化的数据)。
    包含未初始化的全局变量和静态变量(未初始化的数据,通常初始化为零)。
    特点:数据段分为已初始化和未初始化两部分。
  3. BSS段(Block Started by Symbol)
    位置:数据段的一部分,通常位于数据段的末尾。
    用途:存储未初始化的全局变量和静态变量。
    特点:在程序启动时,由操作系统自动初始化为零。
  4. 堆空间(Heap)
    位置:数据段之后,栈空间之前。
    用途:动态内存分配。
    特点
    从低地址向高地址生长。
    可以动态扩展,但扩展有限,受系统内存限制。
    程序员通过malloc、calloc、realloc等函数手动管理。
  5. 栈空间(Stack)
    位置:通常位于内存的高地址区域。
    用途
    存储函数调用时的局部变量、函数参数和返回地址。
    管理函数调用的执行流程。
    特点
    从高地址向低地址生长。
    自动管理,具有“后进先出”(LIFO)的特性。
    每个函数调用都会在栈上分配一个栈帧,包含局部变量和返回地址。
  6. 内核虚拟内存(Kernel Virtual Memory)
    位置:通常不直接显示在用户程序的内存布局中,但存在于操作系统内核中。
    用途:操作系统内核的运行环境。
    特点:与用户程序隔离,提供安全性。

±----------------------------------+
| 内核虚拟内存 |
±----------------------------------+
| 栈空间(Stack) |
| (高地址) |
±----------------------------------+
| 堆空间(Heap) |
| (低地址) |
±----------------------------------+
| 数据段(Data) |
| (包括BSS段) |
±----------------------------------+
| 代码段(Code) |
| (低地址) |
±----------------------------------+

2. 递归

递归要有三要素
1.要有递归体(即函数自己调用自己的语句)
2.递归的出口(如果不给递归设置结束条件,那么就一定会出现栈溢出的情况)
3.递归的深度(每次递归都会导致栈帧进栈,如果深度过大,那么栈会溢出)

long jiechen(int n) {
	//先写边界条件
	if (n == 1) {
		return 1;
	}
	//再写递归体
	return n * jiechen(n - 1);
}
int main() {
	long result = jiechen(5);
	printf("%d", result);
	return 0;
}

递归的优点就是简洁,清晰
递归的缺点就是栈溢出风险高,效率低,内存消耗大,难以调试,难以思考

汉诺塔问题递归解法:
在这里插入图片描述

int hanoi(int n) {
	if (n == 2) {
		return 3;
	}
	return hanoi(n - 1) + 1 + hanoi(n - 1);
}

int main() {
	//print_hello(5);
	//long result = jiechen(5);
	int result = hanoi(3);
	printf("%d", result);
	return 0;
}

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

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

相关文章

K8s运维管理平台 - xkube体验:功能较多

目录 简介Lic安装1、需要手动安装MySQL,**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1:layui、layuimini和beego的详细介绍1.…

舆情系统的情报搜索功能

引言 随着信息技术的发展和网络媒体的快速发展,舆情监测已成为各行各业不可或缺的工具。舆情系统中的情报搜索功能,作为其核心组成部分,能够帮助用户迅速、全面地捕捉互联网、社交平台、新闻媒体等渠道中的各类信息和舆论动态。情报搜索不仅提…

简易CPU设计入门:控制总线的剩余信号(二)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 CSDN文章:下载本项目代码 上述链接为本项目…

[创业之路-270]:《向流程设计要效率》-2-企业流程架构模式 POS架构(规划、业务运营、支撑)、OES架构(业务运营、使能、支撑)

目录 一、POS架构 二、OES架构 三、POS架构与OES架构的差异 四、各自的典型示例 POS架构典型示例 OES架构典型示例 示例分析 五、各自的典型企业 POS架构典型企业 OES架构典型企业 分析 六、各自典型的流程 POS架构的典型流程 OES架构的典型流程 企业流程架构模式…

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片! 番石榴病害数据集 背景描述 番石榴 (Psidium guajava) 是南亚的主要作物,尤其是在孟加拉国。它富含维生素 C 和纤维,支持区域经济和营养。不幸的是,番石榴生产受到降…

基于PostgreSQL的自然语义解析电子病历编程实践与探索(上)

一、引言 1.1研究目标与内容 本研究旨在构建一个基于 PostgreSQL 的自然语义解析电子病历编程体系,实现从电子病历文本中提取结构化信息,并将其存储于 PostgreSQL 数据库中,以支持高效的查询和分析。具体研究内容包括: 电子病历的预处理与自然语言处理:对电子病历文本进…

5.1.3 软件过程评估

文章目录 软件能力成熟度模型CMM能力成熟度模型集成 软件能力成熟度模型CMM 软件能力成熟度模型是用于评价软件承接方能力的方法,通过评价,也可以让承接方看到自身缺陷,不断改进和提升软件过程能力。分为5个成熟度等级,初始级、可…

【JavaEE】Spring(5):Mybatis(上)

一、什么是Mybatis Mybatis是一个持久层的框架,它用来更简单的完成程序和数据库之间的交互,也就是更简单的操作和读取数据库中的数据 在讲解Mybatis之前,先要进行一些准备工作: 1. 为项目添加 Mybatis 相关依赖 2. 创建用户表以…

记录 | MaxKB创建本地AI智能问答系统

目录 前言一、重建MaxKBStep1 复制路径Step2 删除MaxKBStep3 创建数据存储文件夹Step4 重建 二、创建知识库Step1 新建知识库Step2 下载测试所用的txtStep3 上传本地文档Step4 选择模型补充智谱的API Key如何获取 Step5 查看是否成功 三、创建应用Step1 新建应用Step2 配置AI助…

【Spring】Spring启示录

目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里,随着项目的增长和需求的变化,如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…

八股——Java基础(四)

目录 一、泛型 1. Java中的泛型是什么 ? 2. 使用泛型的好处是什么? 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 4.什么是泛型中的限定通配符和非限定通配符 ? 5. List和List 之间有什么区别 ? 6. 可以把List传递给一个接受List参数的方法吗? 7. Arra…

基于STM32的循迹小车设计与实现

1 系统方案设计 根据系统设计功能,展开基于STM32的循迹小车设计,整体设计框图如图2.1所示。系统采用STM32单片机作为控制器,通过L298驱动器控制两个直流电机实现对小车的运动控制,两路红外模块实现黑线的检测,HC-SR04超声波模块实…

AI刷题-蛋糕工厂产能规划、优质章节的连续选择

挑两个简单的写写 目录 一、蛋糕工厂产能规划 问题描述 输入格式 输出格式 解题思路: 问题理解 数据结构选择 算法步骤 关键点 最终代码: 运行结果:​编辑 二、优质章节的连续选择 问题描述 输入格式 输出格式 解题思路&a…

达梦拷贝DM_HOME的复制安装

近期一个项目需求,需要在没有安装包的情况下,将达梦数据库安装到虚机上(生产机上安装了达梦),故采用直接打包生产机DM_HOME的方式拷贝至虚机,再依次执行达梦的部分指令完成安装。以下为验证的步骤&#xff…

网络工程师 (3)指令系统基础

一、寻址方式 (一)指令寻址 顺序寻址:通过程序计数器(PC)加1,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳…

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

DeepSeek R1与OpenAI o1深度对比

文章目录 引言技术原理DeepSeek R1OpenAI o1 性能表现官方数据推理任务知识密集型任务通用能力 价格对比应用场景科研与技术开发自然语言处理(NLP)企业智能化升级教育与培训数据分析与智能决策 部署与集成DeepSeek R1OpenAI o1 伦理考量DeepSeek R1OpenA…

图漾Halcon版本SDK使用教程【V1.1.0新版本】

1.下载并安装 Halcon 1.1 下载Halcon软件 在 Halcon 官网(https://www.mvtec.com/downloads) 下载 Halcon (Windows 版) 安装包,并根据官方文档安装 Halcon,下载HALCON24.11Progress-Steady。 1.2 安装Halcon 1.解压HALCON 24.11.1.0的安装包压缩文件…

20.Word:小谢-病毒知识的科普文章❗【38】

目录 题目​ NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完,确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…

算法题(49):反转链表II

审题: 需要我们对指定范围的链表进行反转,并返回反转后链表的头结点 思路: 方法一:vector法 我们先遍历一次链表,并把数据对应的存在数组中,然后利用数组的reverse方法进行反转数据,最后再遍历一…