函数嵌套调用
-
当前运行函数在调用另一个函数前
a.将所有的实参、返回地址等信息传递给被调用函数保存
b.为被调用函数的局部变量分配存储区
c.将控制转移到被调用函数的入口 -
被调用函数返回到调用函数前
a.保存被调用函数的计算结果
b.释放被调函数的数据区
c.依照被调函数保存的返回地址将控制转移到调用函数 -
多个函数的嵌套调用遵循“后调用先返回”的原则
递归
- 类似函数的嵌套调用,只是调用函数与被调用函数是同一个函数
- 层次:一次递归函数的调用称为一层
- 工作记录:每一层递归所需信息
- 活动记录:位于栈顶的工作记录
递归函数的时间复杂度与空间复杂度分析
- 时间复杂度
常常采用迭代法对递归方程进行展开分析 - 空间复杂度
递归函数执行时,系统需要建立一个“递归工作栈”去存储每一层递归所需信息,因此分析空间复杂度就要确定工作站的大小,也就是分析有多小层
经典汉诺塔(直接附上递归树)
很明显,递归方程为f(n)=2^n-1,f(n)表示问题规模为n时函数所需要执行的次数,则O(n)=O(f(n))=O(2的n次方),空间复杂度为S(n)=n(即层数)