#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
任何人都可以解释一下,如果代码的“其他”部分中没有return语句时,screw(5),screw(4),screw(3),screw(2)如何返回1。
使用调用堆栈来解释将是高度赞赏的。非常欢迎您提供任何与之相关的基础知识。

最佳答案

在x86架构上的C / C++调用约定中,函数在eax寄存器中返回值。 C语言中的“return val”语句使用val更新eax。如果没有显式的“return val”,则该值恰好在eax寄存器中,成为函数的返回值。在您的示例中,最里面的调用在返回时将1放入eax中,这将传播给所有递归调用。

10-07 14:56