更正:以下所指ebx应改为eax。
EBX指“基地址”寄存器,在内存寻址时存放基地址;、
EAX是累加器(accumulator),一般用来保存函数的返回值。
首先说说递归的实现和栈的关系吧,这里引入一个著名的尾递归-斐波那契数列的实现,我用的是C语言编写该函数,
int Fib(int n)
{
if(i==1||i==2)
return 1;
return Fib(i-1)+Fib(i-2);
}
我们不妨把函数Fib和return语句中调用的函数看作是不同的函数(只是具有了相同的名称),那么就涉及到了函数调用的知识,我们知道,在函数调用的过程中(比如A函数中调用了B函数),编译器就会把A函数的参数,局部变量及返回地址压入栈中存储,再进行B函数的调用。这里用汇编的思想解释会比较生动,如下图所示,假设传入参数为5
此时返回值已有确定值,开始按顺序出栈,运行到有返回地址字样时执行命令call XXXX(跳入该函数体内执行该函数),如下图

本文通过分析斐波那契数列的尾递归实现,探讨了递归调用与栈的关系。在函数调用过程中,参数、局部变量和返回地址会被压入栈中。通过一步步的栈操作,详细展示了递归调用如何利用栈的先进后出特性来解决问题。递归与栈的密切关系在计算机科学中广泛应用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



