栈帧基础(理解)与递归函数在内存中的调用过程
栈帧学习笔记
什么是栈帧?
函数
被调用时,栈中会分配一块空间来调用相关信息- 每一个调用都被当作是活跃的
- 栈上的那块存储空间被称作为活跃记录,或是被称作栈帧
栈帧由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 |