递归过程与递归工作栈

这篇具有很好参考价值的文章主要介绍了递归过程与递归工作栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

递归过程与递归工作栈

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

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

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

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

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

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

关于返回地址:除了最外层的地址外,每个n-1层的地址都一样。因为,分别对应着栈底指针和栈顶指针。文章来源地址https://www.toymoban.com/news/detail-404232.html

到了这里,关于递归过程与递归工作栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)

    C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法) 结果图如下   :                           代码如下: //----- 任意两个矩阵相乘 # include stdio.h int main (void) {     char ch;     int a, b, c, d;     printf (\\\"此算法用于任意两个矩阵相乘  n矩阵1(a行b列)

    2023年04月08日
    浏览(42)
  • 【C++】了解一下STL

    个人主页 : zxctscl 如有转载请先通知 STL(standard template libaray- 标准模板库 ): 是C++标准库的重要组成部分 ,不仅是一个可复用的组件库,而且是一个包罗数据 结构与算法的软件框架 。 STL是C++标准库的一部分,像之前的iostream也是标椎库的一部分,不能任务STL里面包含iostre

    2024年03月21日
    浏览(36)
  • 低代码你需要了解一下

    低代码的概念可以追溯到1980年代,当时IBM的快速应用程序开发工具(RAD)被冠以新的名称——低代码,由此,低代码的概念首次面向大众。然而,在近40年的历程中,低代码发展经历了两个阶段: 第一阶段是1980-2015年,这一阶段低代码应用平台市场发展比较迟缓,表现亮眼的

    2024年02月03日
    浏览(32)
  • 了解一下XSS

    XSS,即跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得浏览器执行这些脚本,从而控制网页上的内容或者获取用户的敏感信息 。XSS 攻击一般分为反射型、存储型和 DOM 型三种类型。 1. 反射型 XSS 攻击 反射型 XSS 攻

    2023年04月25日
    浏览(22)
  • 求二叉树中,任意两个节点之间的距离最大值是多少

    提示:本节仍然是重点说二叉树的DP递归套路,非常重要而且容易理解 二叉树的动态规划树形DP递归套路系列文章有这些,可以帮助你快速掌握树形DP的题目解题思想,就一个套路: (1)判断二叉树是否为平衡二叉树?树形DP,树形动态规划的递归套路 请你求一颗二叉树中,

    2023年04月11日
    浏览(40)
  • Leetcode算法递归类—合并两个有序链表

    目录 21. 合并两个有序链表 题解: 代码: 将两个升序链表合并为一个新的  升序  链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例 1: 示例 2: 示例 3: 提示: 两个链表的节点数目范围是  [0, 50] -100 = Node.val = 100 l1  和  l2  均按  非递减顺序  

    2024年02月13日
    浏览(29)
  • 简单但全面了解一下webSocket

    **全双工:**通信的两个参与方可以同时发送和接收数据,不需要等待对方的响应或传输完成。双全工指的是一种通信方式,通过建立全双工的持久连接客户端和服务器之间就能实现高效实时性更强的通信。 传统通信 : 电子邮件、网页浏览存在延迟,需要用户主动请求来获取

    2024年02月20日
    浏览(29)
  • B树你需要了解一下

    B树(B-tree)是一种自平衡的树,能够保持数据有序,常被用于数据库和文件系统的实现。 B树可以看作是一般化的二叉查找树,它允许拥有多于2个子节点。与自平衡二叉查找树不同,B树为系统大块数据的读写操作进行了优化。B树减少定位记录时所经历的中间过程,从而加快

    2024年02月04日
    浏览(26)
  • Node基础概念,先了解一下

    Nodejs是基于Chrome V8引擎的服务器端JavaScript运行环境,也就是说可以在浏览器之外的主机上运行JavaScript。 Nodejs有三部分组成:标准库、中间层和底层库。 标准库:是给开发人员直接调用的API,比如HTTP模块; 中间层:为什么要有中间层呢?主要是因为NodeJS底层采用C语言来实现

    2024年02月07日
    浏览(27)
  • 了解一下 Linux 中的 DPDK

    文章首发地址 DPDK(Data Plane Development Kit)是一种高性能数据包处理框架,它提供了一系列的库和驱动程序,可以在通用的x86服务器上实现高吞吐量和低延迟的网络数据包处理。DPDK可以用于加速网络功能虚拟化(NFV)、软件定义网络(SDN)、云计算等应用场景。 软件驱动程序

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包