计算机网站建设维护的基本知识软文素材网
首先了解一下任意两个函数之间进行调用的情况:
比如在a函数里面调用b函数,那么在使用b函数之前,计算机还会1.把实参,返回地址给复制下来(但只是复制而已,地址不是原来的。)如图:
此外2.为被调用的函数b的局部变量分配空间。 3.将控制转移到被调用函数b的入口
执行完毕后,计算机会保存计算结果,释放数据空间,再依照原来保存的返回地址传值。
以上,我们可以看出,当多个函数调用的时候,顺序实际上是“后运行的先出结果”这符合栈的工作原理“后进先出”,由此我们也可以明白递归函数是刚刚所说的 多个函数互相调用的特例。因为语句一样。(递归工作栈)
对于特例,我们具体展开来看:主函数作为地1层
为保证递归函数的正确进行,系统会设立一个“递归工作栈”,作为递归函数运行期间的数据存储区,每进入一层函数,就将数据(包括所有实参,局部变量 和 上一层的返回地址)放在栈顶,
将当前执行层的工作记录(也叫栈顶工作记录)称为“活动记录”。
关于返回地址:除了最外层的地址外,每个n-1层的地址都一样。因为,分别对应着栈底指针和栈顶指针。