递归的意外行为

Unexpected behavior of recursion

本文关键字:意外 递归      更新时间:2023-10-16
#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任何人都可以解释螺钉(5),螺钉(4),螺钉(3),螺钉(2)如何在其代码的" else"部分中没有返回语句时返回1。使用呼叫堆栈来解释将不胜感激。关于与之相关的基础知识的任何见解都非常受到欢迎。

在x86体系结构上调用约定中,funtion返回eax寄存器中的值。c更新eax中的"返回val"语句。如果没有明确的"返回阀",则该值恰好是在EAX寄存器中成为函数返回值。在您的示例中,最内向的呼叫在返回时将1个在eax中放在1中,这会传递给所有递归电话。