首页 > 解决方案 > 递归如何返回值?

问题描述

1. #include<stdio.h> 

    int recursion_check(int i);

 
    main(){

         printf("%d",recursion_check(6));
    }
    
    int recursion_check(int i){
    
    if(i==0)
    return 5;
    
    else{
        recursion_check(i-1);
        }
        
    }

我正在从主函数调用一个函数(递归检查)并获取返回值,但在其他情况下没有返回值我如何获得返回值?

标签: cfunctionrecursionreturn

解决方案


欢迎来到未定义的行为。

它在您的(假设的)普通计算机上工作的原因是因为在英特尔平台上的寄存器大小或更小的整数返回是通过写入RAX/EAX/AX寄存器来完成的,因此这些平台上的大多数编译器将避免使用该寄存器进行计算,如果他们可以避免的话它。

因此,当您的函数最终达到有效return并写入RAX寄存器,然后从整个调用链中返回时,最初调用您的递归函数的函数将读取RAX并获得5一次写入的函数。

当然,没有什么能阻止编译器完全不这样做。它不必使用RAX,也不必避免将其用于其他计算。因此,未定义的行为。


推荐阅读