当前位置: 首页 > news >正文

递归过程与递归工作栈

首先了解一下任意两个函数之间进行调用的情况:

比如在a函数里面调用b函数,那么在使用b函数之前,计算机还会1.把实参,返回地址给复制下来(但只是复制而已,地址不是原来的。)如图:

 此外2.为被调用的函数b的局部变量分配空间。        3.将控制转移到被调用函数b的入口

执行完毕后,计算机会保存计算结果,释放数据空间,再依照原来保存的返回地址传值。

以上,我们可以看出,当多个函数调用的时候,顺序实际上是“后运行的先出结果”这符合栈的工作原理“后进先出”,由此我们也可以明白递归函数是刚刚所说的 多个函数互相调用的特例。因为语句一样。(递归工作栈)

对于特例,我们具体展开来看:主函数作为地1层

为保证递归函数的正确进行,系统会设立一个“递归工作栈”,作为递归函数运行期间的数据存储区,每进入一层函数,就将数据(包括所有实参,局部变量 和 上一层的返回地址)放在栈顶,

将当前执行层的工作记录(也叫栈顶工作记录)称为“活动记录”。

关于返回地址:除了最外层的地址外,每个n-1层的地址都一样。因为,分别对应着栈底指针和栈顶指针。

http://www.lryc.cn/news/45877.html

相关文章:

  • B 树的简单认识
  • 【大数据Hive3.x数仓开发】窗口函数案例:连续N次登录的用户;级联累加求和;分组TopN
  • openpyxl库自动填充excel实例分享
  • ICLR2021清华团队做的知识蒸馏提升detector的点的工作paper 小陈读论文系列
  • Java核心技术知识点笔记—集合框架
  • Rsync数据同步工具
  • redux小结
  • 【Python】【进阶篇】十、Pygame的Font文本和字体
  • 【从零开始学习 UVM】10.8、UVM TLM —— UVM TLM Example
  • 获取自己所上传资源的下载量
  • Aspose.cells模板导出使用记录
  • AcWing——糖果传递
  • Redis中的单线程模型
  • Python函数默认参数设置(超级详细)
  • 人工智能如何赋能业务创新?安克创新有话要说
  • 如何学习与学习的本质
  • C++ deque容器
  • HashMap的底层原理
  • Django 4.0文档学习(四)
  • 2023年全国最新高校辅导员精选真题及答案38
  • 和ChatGPT-4聊完后,我觉得一切可能已经来不及了
  • RocketMQ 5.1 NameServer 启动流程
  • 马云回国,首谈ChatGPT
  • 深入理解C++迭代器:让你的C++代码更加灵活
  • Java 读取Excel模板中的数据到实体类
  • 【java基础】Socket网络编程
  • 转发和重定向区别
  • java面试题(持续更新)
  • 【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议
  • 实战打靶集锦-013-Loly