首先了解一下任意两个函数之间进行调用的情况:
比如在a函数里面调用b函数,那么在使用b函数之前,计算机还会1.把实参,返回地址给复制下来(但只是复制而已,地址不是原来的。)如图:
此外2.为被调用的函数b的局部变量分配空间。 3.将控制转移到被调用函数b的入口
执行完毕后,计算机会保存计算结果,释放数据空间,再依照原来保存的返回地址传值。
以上,我们可以看出,当多个函数调用的时候,顺序实际上是“后运行的先出结果”这符合栈的工作原理“后进先出”,由此我们也可以明白递归函数是刚刚所说的 多个函数互相调用的特例。因为语句一样。(递归工作栈)
对于特例,我们具体展开来看:主函数作为地1层
为保证递归函数的正确进行,系统会设立一个“递归工作栈”,作为递归函数运行期间的数据存储区,每进入一层函数,就将数据(包括所有实参,局部变量 和 上一层的返回地址)放在栈顶,
将当前执行层的工作记录(也叫栈顶工作记录)称为“活动记录”。文章来源:https://www.toymoban.com/news/detail-404232.html
关于返回地址:除了最外层的地址外,每个n-1层的地址都一样。因为,分别对应着栈底指针和栈顶指针。文章来源地址https://www.toymoban.com/news/detail-404232.html
到了这里,关于递归过程与递归工作栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!