我有一个搜索函数,它使用递归来执行数组的二分搜索,values[]
, for a value
:
int recurseSearch(int value, int values[], int min, int max) {
if (value > values[max] || min > max) return 1;
int midpoint = (max+min)/2;
if (values[midpoint] > value)
//search in left
recurseSearch(value, values, min, midpoint);
else if (values[midpoint] < value)
//search in right
recurseSearch(value, values, midpoint, max);
else if (values[midpoint] == value)
return 0;
else
return 2;
return 3;
}
调用这个的代码只是简单地调用recurseSearch(value, values, 0, n);
为了验证起见,我将设置values[5]
等于{3, 11, 32, 54, 66}
, value
to be 3
(即这应该返回 0),并且n
因此成为5
.
所以这被称为:recurseSearch(3, values, 0, 5);
现在我希望它最终会返回并打印,0
, since 3
确实在数组中。调试后一切都很顺利,直到midpoint
是 0,因此values[midpoint] == value
是真的,所以return 0
线路应该运行。然而,相反发生的事情是它确实发生了,但随后控制显然移到了最后(关闭}
)的函数,但然后返回并运行return 3;
在线(此处)21。
我不明白为什么return 0
语句不仅仅从函数中返回,为什么return 3
根本不运行
注意:这个问题可以通过删除来解决return 3;
行,但这会导致 clang 抱怨,并且运行命令 (make
)我正在使用的,fatally有嘶嘶声,我宁愿避免这种情况