《计算之魂》读书笔记——递归与堆栈的关系

news2024/11/12 18:57:13

进入梅雨季节,一周末雨水连绵不绝,空气中泛着潮湿的凉爽。这个天气最适合找个角落,安安静静地读书写字。

继续读《计算之魂》,前次读到递归,今天则了解递归地数据结构实现。递归算法的层层实现,需要保留从顶部到底部的很多中间状态,在到达最底层时,根据保留下来的状态一一回溯,直到最顶部。堆栈对这一算法需求的适配程度非常高,因为对战是一个先进后出、后进先出(LIFO)的数据结构。

拿上次的汉诺塔举例。原题中是要求将64个盘子从A柱借助T柱移动到B柱,上篇为了简单,代码实现时只输出了4、5个盘子的情况。那么回到原题,想挪动第64个盘子,就要先挪走上面的63个,具体来说,Hanoi(64, A, B, T)调用了过程Hanoi(63, A, T, B),而Hanoi(63, A, T, B)又调用了Hanoi(62, A, B, T)......,直到Hanoi(1, A, T, B),如下图所示:

最初进入堆栈的是Hanoi(64, A, B, T),放在最底下,然后是Hanoi(63, A, T, B), 放在倒数第二层,最后进来的是Hanoi(1, A, T, B),放在最顶层。最顶上的Hanoi(1, A, T, B)最先被执行,然后被清除出堆栈。一直到最底部的Hanoi(64, A, B, T)被执行,执行完毕并被清除出堆栈后,堆栈被清空,整个程序执行完毕。

堆栈这种处理事情的顺序在生活中并不多见,所以初学者理解起来会觉得有些困难。但是对于计算机来说,它在处理问题时,常常是把一个大问题从上而下分解成很多小问题,一个个拆开并解决之后,再回过头来得到整个问题的答案。堆栈能够记录这中间一步一步分解的复杂过程,而且由于最后合并的过程和一开始拆解的过程正好相反,因此它后进先出的特点很自然地将分解了的问题合并回去。

书中还给出了用堆栈实现简单计算器的例子,由于时间限制,今天就先不再多写了,感兴趣的同学可以找书来读。作为一个行业老兵,再回过头来去读这些看似基础的理论,仍然是有很多反思和收获的。

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

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

相关文章

大数据周会-本周学习内容总结018

开会时间:2023.06.18 15:00 线下会议 01【调研-数据分析(质量、ETL、可视化)】 ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform…

Tcl常用命令备忘录-正则命令篇

正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中,可以使用正则表达式对字符串进行匹配、查找和替换。 regexp 语法: regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...? 其中,?选项?为可选项,…

基于蒙特卡洛法的规模化电动汽车充电负荷预测(PythonMatlab实现)

目录 0 概述 1 蒙特卡洛模拟方法介绍 2 规模化电动汽车充电负荷预测计算方法 3 完整代码 0 概述 对于本文的研究,依据不同用途电动汽车影响因素的分布函数和设定参数,采用蒙特卡洛法,对各用途电动汽车的日行驶里程、起始充电时间概率分布参数进行随机抽样&#xff0…

linuxOPS系统服务_Linux下软件的安装方式之源码安装

Linux下有哪些软件安装方式 ① RPM软件包管理(软件名称.rpm) ② YUM软件包管理(使用yum命令install 软件名称) > 下载 安装一体化 ③ 源码编译安装(相对来说是最复杂的一种方式) 软件包类型 ☆ 二…

十二、docker学习-docker核心docker网络之bridge网络(2)

bridge网络 bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接,这样容器内部才能访问互联网。 # 查看docker0网络,在默认环境中,一个名为docker0的linux b…

Go语言的TCP和HTTP网络服务基础

目录 【TCP Socket 编程模型】 Socket读操作 【HTTP网络服务】 HTTP客户端 HTTP服务端 TCP/IP 网络模型实现了两种传输层协议:TCP 和 UDP,其中TCP 是面向连接的流协议,为通信的两端提供稳定可靠的数据传输服务;UDP 提供了一种…

NodeJSMongodbMVC管理开发⑨

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言MVC思想开发 服务器代码演示 M层 Services 或 Model V层 Views C层 Controllers总结 ✨文章有误请指正,如果觉得对你有用&#xff0c…

C语言笔记之结构体总结

C语言笔记之结构体总结 code review! 文章目录 C语言笔记之结构体总结一.介绍二.3种结构体类型变量说明1. 先定义结构,再定义结构变量2. 定义结构体类型的同时说明变量3. 直接说明结构变量(匿名结构体) 四.结构体成员表示方法五.结构体指针做参数六.结构体初始化1…

阵列信号处理笔记(2):均匀线阵、均匀加权线阵、波束方向图

阵列信号处理笔记(2) 文章目录 阵列信号处理笔记(2)均匀线阵(Uniform Linear Array)均匀加权线阵波束方向图的关键参数附polardb.m用来计算HPBW的Mathematica代码,以及用于拟合的数据拟合的MATL…

二、DSMP/OLS等夜间灯光数据贫困地区识别——MPI和灯光指数计算

一、前言 其实在计算MPI和灯光指数之前,最重要是DMSP/OLS等夜间灯光指数的校正还有就是MPI计算,那么校正分为DMSP/OLS和NPP/VIIRS夜间灯光数据,DMSP/OLS夜间灯光数据校正主要采取不变目标区域法原理进行校正,当前对其有很多优化后的做法,但是万变不离其宗,核心思想还是没…

LeetCode257. 二叉树的所有路径

写在前面: 题目链接:LeetCode257. 二叉树的所有路径 题目难度:简单 编程语言:C 一、题目描述 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的…

阿里P8架构师手码的Java工程师面试小抄在Github火了,完整版限时开源

网上的 JAVA 面试文档更是层出不穷。但是单单刷 JAVA 面试题就足够了吗? 答案显然是不够的!那么为什么呢? 因为现在的程序员就业环境早就和两年前不可同日而语了。 如果你在两年前面试: 就拿 JVM 来说,刷面试题可能…

Springboot+vue.js+协同过滤推荐+余弦相似度算法实现新闻推荐系统

Springbootvue.js协同过滤推荐余弦相似度算法实现新闻推荐系统 - 简书 针对海量的新闻资讯数据,如何快速的根据用户的检索需要,完成符合用户阅读需求的新闻资讯推荐?本篇文章主要采用余弦相似度及基于用户协同过滤算法实现新闻推荐&#xff0…

SpringMvc详解

SpringMvc用来代替展示层Servlet,均属于Web层开发技术 Servlet是如何工作的 1、导入Servlet依赖坐标 2、创建一个Servlet接口实现类,重写其中的所有方法 3、在Servlet实现类上加上WebServlet注解,用来配置Servlet访问路径 4、启动Tomca…

Misc(6)

隐藏的钥匙 还是一样挨个试,详细信息里没有发现flag信息,就用010打开试试 文件头正常,暂时没有发现隐藏文件 喝,多搜搜还是有收获的,一开始以为是有隐藏文件就利用ctrlf在010中进行搜索 分别搜索了txt和rar文件都没有反…

VLAN基础知识2_VLAN二层通信原理

目录 1.VLAN二层通信简介 2.同一交换机VLAN二层通信 3.跨交换机VLAN二层通信 4.VLAN二层通信实验 4.1 VLAN基本配置命令 4.2 VLAN配置步骤 4.3 VLAN二层通信实验效果 1.VLAN二层通信简介 VLAN是一个逻辑上的分组,可以将一个物理网络端口分割成多个虚拟网络&…

C++初始化列表详解

写在前面: 初始化列表是一种用于初始化成员变量的语法结构,它可以在类的构造函数中使用,用于初始化类的成员变量。 而 列表初始化指的是 是一种初始化变量的简洁方式,可以用花括号{}来表示。列表初始化可以用于各种类型的变量&…

某农业大学c/c++第五次实验(类和对象)

1.Time时间类 【问题描述】 设计一个Time类,并设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。 例如: 其中构造函数Time::Time(int s)根据总秒数计算hour、minute、second并构造对象&#x…

C语言,BMP格式解析,生成不同位深的图片。

0.前言 目录 0.前言 1.BMP格式详解 1.1图片的构成 1.2BMP格式 1.2.1文件头 1.2.2位图信息头 1.2.3调色板 1.2.4位图数据 2.生成 3.总结 最近工作任务繁重且对我来说小有难度,但是没有困难的事情做起来怎么有收获呢? 今天推荐一本书《寻找光…

Windows10环境下载安装Oracle19c教程

Windows10环境下载安装Oracle19c教程 前言1. 官网下载2. 运行setup.exe2.1 解压缩2.2 报错解决 3.正式安装3.1 配置选项3.2 系统类3.3 oracle主目录用户3.4 安装位置3.5 先决条件检查3.6 安装产品3.7 安装完成3.8 完全卸载oracle(非必备) 4. 安装验证4.1 CMD验证4.2 SQL Plus4.…