意外的递归行为

时间:2017-02-22 04:07:06

标签: c++ recursion architecture callstack recurrence

#include <iostream>
using namespace std;
int screw(int x){
    if(x==1) 
       return x;
    else 
       screw(x-1);
}
int main(){
    cout<<screw(5)<< endl; 
    return 0;
}

此代码的输出:1 任何人都可以解释当代码的“else”部分没有返回语句时,螺钉(5),螺钉(4),螺钉(3),螺钉(2)是如何返回1的。 使用调用堆栈来解释将非常感激。任何有关它的基础知识的见解都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

在x86架构上的C / C ++调用约定中,funtion返回eax寄存器中的值。 C中的'return val'语句用val更新eax。如果没有明确的'return val',则恰好在eax寄存器中的值成为函数返回值。在你的例子中,最里面的调用在返回时将1放在eax中,这被传递给所有递归调用。