栈帧基础(理解)与递归函数在内存中的调用过程

栈帧学习笔记

  • 什么是栈帧?

    • 函数被调用时,栈中会分配一块空间来调用相关信息
    • 每一个调用都被当作是活跃的
    • 栈上的那块存储空间被称作为活跃记录,或是被称作栈帧
  • 栈帧由5个区域组成

    • 输入参数
    • 返回值空间(返回值)
    • 计算表达式时用到的临时存储空间
    • 函数调用时保存的状态以及输出参数
  • 什么时输入参数和输出参数?

    • 输入参数是传递到活跃记录中的参数
    • 输出参数是传递给在活跃记录中调用的函数所使用的
    • 一个活跃记录中的输出参数就成为栈中下一个活跃记录的输入参数

ps: 自己的理解就是:
输入参数就是传递给函数的实际参数
输出参数就是在函数中调用其他函数时,传递到另一个函数中的实际参数


递归函数在内存中的调用过程

emmmmm 手动画的有点丑,凑合看
左边是递推阶段,右边是回归阶段

图片

下面是大概画一下本子上的东东

n=4 n=4 …. n=4 n=4
? ? …. ? (n*6)=24
….
n=3 n=3 …. n=3 n=3
? …. (n*2)=6
….
n=2 …. n=2