【发布时间】:2019-03-26 14:15:10
【问题描述】:
我参加了 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);
【问题讨论】:
-
不要想知道为什么未定义的行为会起作用。
-
这不是 C 语言的工作方式:您通常永远无法通过运行程序来证明它是正确的。确保程序正确的唯一方法是证明它遵循规则。
-
你是对的。应该有
return buscar(x, v, n-1);。例如,在 C# 中,这不会编译,编译器会说:“并非所有代码路径都返回值”