今天看到一个很好理解递归的压栈思想,记录一下。

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函数,没有输出。至此,栈空,结束。

输出结果如下

该思想可用于树的遍历等

递归理解(压栈思想)相关推荐

  1. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

  2. c语言局部变量压栈顺序,C 程序局部变量压栈出栈的理解

    写这篇总结的缘由仅仅出于巧合,五一前帮一位同学看51的程序,在查看汇编代码的时候(事实上我当时的汇编知识基本都还给了老师),无意中问起我"某个局部变量的声明怎么没有对应的汇编语句" ...

  3. 汇编中call printf参数压栈时错误理解

    EAX, ECX,EDX,EBX均可以32bit,16bit,8bit访问,如下所示: <-------------------EAX------------------------> | ...

  4. C/C++函数调用的压栈模型

    函数调用的压栈模型对于我们学习C语言非常重要,最直观的体现在我们后面要学的函数的递归,函数的递归就充分利用的函数的压栈模型. 当函数从入口函数main函数开始执行时,编译器会将我们操作系统的运行状态, ...

  5. 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.2节Spark初体验,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 ...

  6. 从无到有算法养成篇-利⽤栈思想解决问题

    一.什么时候用到栈思想? 栈的思想应⽤数据是线性的,问题可以利⽤栈的特性先进后出去解决问题! 二:思想实战 1.括号匹配检验:假设表达式中允许包含两种括号:圆括号与⽅括号,其嵌套顺序随意,即() 或者 ...

  7. 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁

    上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...

  8. 压栈, 跳转,执行,返回:从汇编看函数调用

    From:https://www.jianshu.com/p/594357dff57e C函数调用过程原理及函数栈帧分析:https://blog.csdn.net/zsy2020314/articl ...

  9. 基于GDB-peda汇编调试理解函数调用栈

    一.前言 1.1 叙叙旧 距离上一次写文章已经过去3个月了,当初计划至少一个月一篇,不曾想这一拖就是三个月.一直不写的主要原因是当把一个问题弄清楚了,或者说掌握了一个东西,就觉得没有什么可值得写:另外 ...

最新文章

  1. 如何查询MySql日志
  2. 从“没有免费的午餐”理论看机器学习模型
  3. python分类器knn、svm_[转载]MatLab分类器大全(svm,knn,随机森林等)
  4. sklearn 线性回归_使用sklearn库做线性回归拟合
  5. 不属于jsp构成元素_JSP构成元素-JSP基础
  6. 数据库入门-基本sql语句及数据类型
  7. Shell.FlyoutHeaderTemplate
  8. JLink EDU v7.58 变砖修复
  9. C# 简单实现QQ截图功能
  10. tas5424_TAS5424A 4 通道汽车数字放大器
  11. php多张图片下载(zip压缩)
  12. 2019吉林省赛东北四省赛总结
  13. BLE service, characteristic
  14. 为什么街上发传单的人会认真发完,却不把传单丢了呢?
  15. 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测
  16. python蓝牙控制手机打电话_通过蓝牙连接车机和手机,实现打电话功能实现
  17. 再没时间 创业时也要读下这十本经典书
  18. OBS 虚拟演播系统 - 视频学习笔记
  19. python实现lagrange函数
  20. jsf的初步使用(包括jsf框架的引入、用户登录、自定义表单验证、valueChangeEvent值变更事件处理做的级联下拉框)

热门文章

  1. Android应用中MVP最佳实践 Jude95
  2. 解决ubuntu优盘不能读取
  3. 妙味canvas动画揭、秘交互式动画设计视频 教程
  4. Lustre参数调整
  5. js中输入两个数,判断奇偶数
  6. MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)
  7. 抖音最强python_装逼篇 抖音超火的九宫格视频是如何生成的Python 告诉你答案
  8. Business Model Generation《商业模式新生代》对软件测试的启发
  9. IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测
  10. 书旗小说发布2020年度阅读报告,赘婿、系统、脑洞、年代成四大年度小说热词