为什么这个递归函数返回正确的值?

gan*_*lf3 4 c recursion return return-value

运行这样的递归函数(在gcc 7.3.1中编译):

#include <stdio.h>

int arr[] = {5,1,2,6,7,3};
int arraySize = 6;

int recfind(int value, int index)
{
    if (arr[index] == value)
        return 1;
    if (index >= arraySize)
        return 0;
    // return recfind(value, ++index);
    recfind(value, ++index);
 }

int main() {
    printf("found 6? %d\n", recfind(6, 0));
    printf("found 9? %d\n", recfind(9, 0));
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

found 6? 1
found 9? 0
Run Code Online (Sandbox Code Playgroud)

为什么这样做?由于recfind未返回递归调用的结果,所以如何选择更高级别调用的返回值?

Gya*_*ain 5

对于C部分是N1256的6.9.1:

如果到达终止函数的},并且调用者使用函数调用的值,则行为是未定义的.

所以程序的行为是不确定的.

为什么这样做?

您正在使用的目标+编译器可能不会篡改包含上一个(递归)函数调用的返回值的寄存器.C并未强制要求此机制在规范中返回值.

所以,尽管听起来很合理,但这并不能保证.