【发布时间】:2018-12-08 17:56:10
【问题描述】:
我绑在递归中编写二进制搜索代码。我首先写的是:
int rSearch(int numbers[],int start, int end, int x){
int mid;
if(start <= end){
mid = (start + end)/2;
if(numbers[mid] == x)
return mid;
else if(numbers[mid] > x)
rSearch2(numbers, start, mid-1, x);
else
rSearch2(numbers, mid+1, end, x);
} else
return -1;
}
而且它的工作完美。但在我搜索后我明白我必须编写这样的代码:
int rSearch2(int numbers[],int start, int end, int x){
int mid;
if(start <= end){
mid = (start + end)/2;
if(numbers[mid] == x)
return mid;
else if(numbers[mid] > x)
return rSearch2(numbers, start, mid-1, x);
else
return rSearch2(numbers, mid+1, end, x);
} else
return -1;
}
因为在第一个代码中我们可能没有返回值。
我的问题是为什么第一个代码有效?
【问题讨论】:
-
未定义的行为是未定义的。
-
@melpomene 愚蠢的问题,但这实际上是 C 中未定义的行为吗?还是只是未指定?我很确定它是未定义的,但我很难找到关于它的参考。
-
@templatetypedef "如果到达终止函数的
},并且调用者使用了函数调用的值,则行为未定义。" @ 987654321@
标签: c function recursion binary-search