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

标签 c recursion

我参加了计算机科学类(class),我们正在学习递归。老师向我们展示了一些代码,我想知道它为什么有效。 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);

它不应该返回“无”并因某些错误而终止吗? 当我运行这个程序时,结果是正确的,符合预期。为什么它的工作原理与

相同
return buscar(x, v, n-1);

最佳答案

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

您“意外”(或巧合)获得预期结果的事实可能是不同级别的函数使用相同的处理器寄存器返回函数结果的结果。

关于c - 递归函数中缺少 return 语句,仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359316/

相关文章:

c - 如何从更大的矩阵中提取 2x2 子矩阵

python - 使用递归计算列表中数字的出现次数

algorithm - 检测时间轴上的冲突,第 2 部分 : Isolate "True" Overlaps

python - 使用递归绘制嵌套三角形

c - 如何打印所有本地用户的组?

c++ - 二分搜索插入C++中的段错误

c++ - boost spirit 递归解析

python - 在Python中生成列表长度k的所有排列的递归算法

c - linux中进程是如何分配栈的

c - 关于 "C"中的 Prime Generation - 我的代码有什么问题? -