递归理解(压栈思想)
今天看到一个很好理解递归的压栈思想,记录一下。
func test(n int) {if n>2 {n--test(n)}fmt.Println("n=",n)
}func main() {n:=4test(n)
}
以上是一段golang的代码
操作过程如下:
1、首先执行main函数,我们调用test(4),这时,将n=4压入栈中。
2、当我们执行test(4),由于4>2,我们要调用test(3),这时,将n=3压入栈中。
3、当我们执行test(3),由于3>2,我们要调用test(2),这时,将n=2压入栈中。
4、当我们执行test(2),由于2>2不成立,我们不再调用test()函数,这时,由于函数已经执行到尽头,我们输出n=2。然后销毁test(2)
6、此时栈顶为n=2,出栈,输出n=2,然后销毁test(3)
7、此时栈顶为n=3,继续出栈,输出n=3,然后销毁test(4)
8,此时栈顶为n=4,继续出栈,由于此时执行的是main函数,没有输出。至此,栈空,结束。
输出结果如下
该思想可用于树的遍历等
递归理解(压栈思想)相关推荐
- LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法
LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...
- c语言局部变量压栈顺序,C 程序局部变量压栈出栈的理解
写这篇总结的缘由仅仅出于巧合,五一前帮一位同学看51的程序,在查看汇编代码的时候(事实上我当时的汇编知识基本都还给了老师),无意中问起我"某个局部变量的声明怎么没有对应的汇编语句" ...
- 汇编中call printf参数压栈时错误理解
EAX, ECX,EDX,EBX均可以32bit,16bit,8bit访问,如下所示: <-------------------EAX------------------------> | ...
- C/C++函数调用的压栈模型
函数调用的压栈模型对于我们学习C语言非常重要,最直观的体现在我们后面要学的函数的递归,函数的递归就充分利用的函数的压栈模型. 当函数从入口函数main函数开始执行时,编译器会将我们操作系统的运行状态, ...
- 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验
本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.2节Spark初体验,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 ...
- 从无到有算法养成篇-利⽤栈思想解决问题
一.什么时候用到栈思想? 栈的思想应⽤数据是线性的,问题可以利⽤栈的特性先进后出去解决问题! 二:思想实战 1.括号匹配检验:假设表达式中允许包含两种括号:圆括号与⽅括号,其嵌套顺序随意,即() 或者 ...
- 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁
上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...
- 压栈, 跳转,执行,返回:从汇编看函数调用
From:https://www.jianshu.com/p/594357dff57e C函数调用过程原理及函数栈帧分析:https://blog.csdn.net/zsy2020314/articl ...
- 基于GDB-peda汇编调试理解函数调用栈
一.前言 1.1 叙叙旧 距离上一次写文章已经过去3个月了,当初计划至少一个月一篇,不曾想这一拖就是三个月.一直不写的主要原因是当把一个问题弄清楚了,或者说掌握了一个东西,就觉得没有什么可值得写:另外 ...
最新文章
- 如何查询MySql日志
- 从“没有免费的午餐”理论看机器学习模型
- python分类器knn、svm_[转载]MatLab分类器大全(svm,knn,随机森林等)
- sklearn 线性回归_使用sklearn库做线性回归拟合
- 不属于jsp构成元素_JSP构成元素-JSP基础
- 数据库入门-基本sql语句及数据类型
- Shell.FlyoutHeaderTemplate
- JLink EDU v7.58 变砖修复
- C# 简单实现QQ截图功能
- tas5424_TAS5424A 4 通道汽车数字放大器
- php多张图片下载(zip压缩)
- 2019吉林省赛东北四省赛总结
- BLE service, characteristic
- 为什么街上发传单的人会认真发完,却不把传单丢了呢?
- 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测
- python蓝牙控制手机打电话_通过蓝牙连接车机和手机,实现打电话功能实现
- 再没时间 创业时也要读下这十本经典书
- OBS 虚拟演播系统 - 视频学习笔记
- python实现lagrange函数
- jsf的初步使用(包括jsf框架的引入、用户登录、自定义表单验证、valueChangeEvent值变更事件处理做的级联下拉框)
热门文章
- Android应用中MVP最佳实践 Jude95
- 解决ubuntu优盘不能读取
- 妙味canvas动画揭、秘交互式动画设计视频 教程
- Lustre参数调整
- js中输入两个数,判断奇偶数
- MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)
- 抖音最强python_装逼篇 抖音超火的九宫格视频是如何生成的Python 告诉你答案
- Business Model Generation《商业模式新生代》对软件测试的启发
- IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测
- 书旗小说发布2020年度阅读报告,赘婿、系统、脑洞、年代成四大年度小说热词