美文网首页
对递归的一些理解

对递归的一些理解

作者: 梦在原点 | 来源:发表于2017-11-13 12:31 被阅读0次

当一个函数的运行期间调用另一个函数的时候,在运行被调用的函数之前,系统会怎样操作呢:

1. 将所有的实参,以及接下来会用到实参的语句的地址等信息传递给被调用的函数保存
2. 为被调用的函数的局部变量(还有被调函数里的变量)分配存储空间
3. 将控制转移到被调用函数的入口

而被调函数结束返回主调函数的之前,系统也是需要做以下的事情:

1. 上一步分配的储存空间全部free掉,但是要保存被调函数的返回结果
2. 依照开始保存的返回地址将控制转移给调用函数。

而在多次调用的时候,按照"后调用先返回"的原则。

也就是说,先把调用的函数拿过来,按照栈的形式进行存储然后再进行操作,例如下面代码:

#include<stdio.h>
void A();
void B();
void C();

void A()
{
    B();
}

void B()
{
    C();
}

void C()
{
    printf("C");
}

int main(void)
{
    A();
    return 0;
}

这是一个压栈的过程!

在主函数调用A函数的时候,栈顶里存放的就是A函数里的数据,然后A函数又去调用B函数,B函数里的数据就被压进栈中,然后是C函数。当C函数执行完操作的时候,就释放掉其存储空间,然后是B,以此类推,当前运行的函数永远在栈顶。

而递归就是函数自己去调用自己,流程是和上面的一样的,如果懂了上面的操作,那么递归是很容易去理解的。

而且在一个函数调用另一个函数的时候,该函数不会继续执行

相关文章

  • 对递归的一些理解

    当一个函数的运行期间调用另一个函数的时候,在运行被调用的函数之前,系统会怎样操作呢: 1. 将所有的实参,以及接下...

  • 回文串

    本篇转载于《漫谈递归:递归的思想》 前面谈到了递归的一些思想,还有概念上的一些理解,这里试着用递归解决一些问题。比...

  • 对递归函数的理解

    输入一个正整数N,输出从1到N的所有正整数: 1. 迭代的方式 2. 递归 刚开始不太理解,为什么分别在递归函数P...

  • 直观理解(尾)递归函数

    前言 我们都见识了不少关于递归与尾递归的各种长篇概论,本文将通过对下面几个问题的直观体验,来帮助加深对递归的理解。...

  • CSI讲义8:理解递归

    所有的计算都是递归;要理解递归首先要理解递归。 程序设计思想之一“递归”历来是同学们的理解难点。据说,**要理解递...

  • 递归算法思想

    在编写计算机程序时,有时使用递归算法可以有效解决一些问题,递归算法往往使算法的描述简洁而且易于理解。 递归算法,就...

  • 4.3递归运行的机制:递归的微观解读

    前言:在4.1节和4.2节中我们分别通过数组以及链表对递归进行了应用,那时我们只是对递归进行了宏观理解--递归是将...

  • 数据结构之理解递归

    理解递归 要理解递归, 首先要理解递归 --佚名 递归是一种解决问题的方法, 他从解决问题的各个小部分开始, 知道...

  • 正则问题

    经典的递归DFS 我对递归的理解不够深啊看到括号 应该很轻松的想到是经典的递归问题 然后只有四个符号()x| 分别...

  • 前端学数据结构与算法(四):理解递归及拿力扣链表题目练手

    前言 再没对递归了解之前,递归一直我的噩梦,对于写递归代码一直都是无从下手,但当理解了递归之后,才惊叹到,编程真的...

网友评论

      本文标题:对递归的一些理解

      本文链接:https://www.haomeiwen.com/subject/shfzmxtx.html