递归函数中缺少return语句,仍然有效

时间:2019-03-26 14:15:11

标签: c recursion

我正在参加CS课,我们正在学习递归。老师给我们看了一些代码,我想知道为什么它能起作用。 buscar是数组v []中的递归搜索函数。它返回x在v []

中的位置
int buscar(int x, int v[], int n) {
    if(n == 0) return -1;
    if(x == v[n-1]) return n-1;
    buscar(x, v, n-1);
}

int main() {
    int v[] = {5, 3, 9, 12};
    printf("%d\n", buscar(5, v, 4));
}

这里的问题是

buscar(x, v, n-1);

它不应该返回“ nothing”并以某种错误终止吗? 当我运行该程序时,结果正确无误。为什么与

一样起作用
return buscar(x, v, n-1);

1 个答案:

答案 0 :(得分:0)

正如其他人所评论的那样,您的代码显示了未定义的行为。

您“偶然”(或机密)获得期望结果的事实可能是由于使用同一处理器寄存器返回函数结果而导致的功能级别不同的结果。