C递归函数不会返回true

我有一个搜索函数,它使用递归来执行数组的二进制搜索, values[] ,用于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);
为了validation,我将values[5]设置为等于{3, 11, 32, 54, 66}value 3 (即,这应该返回0),因此n5

所以这个被调用: recurseSearch(3, values, 0, 5);

现在我希望这最终会返回,并打印0 ,因为3确实在数组中。 在调试时,一切都很顺利,直到midpoint为0,因此values[midpoint] == value为true,因此return 0行应运行。 然而,相反的是它确实发生了,但随后comtrolntly显然移动到函数的结束(关闭} ),但然后向上移动并运行return 3; 在线(这里)21。

我无法理解为什么return 0语句不仅仅返回函数以及为什么return 3根本不运行


注意这个问题通过删除return 3;来解决return 3; 但是,这会导致clang抱怨,并且我正在使用的运行命令( make ), 致命的有一个混合体,我宁愿避免

我没有仔细查看你的代码,所以可能还有其他错误,但听起来你希望最深的递归调用的返回值一直向上传递给调用者。 在这种情况下,你会删除return 3; 并简单地返回您正在进行的每个递归调用的值:

 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 return recurseSearch(value, values, min, midpoint); else if (values[midpoint] < value) //search in right return recurseSearch(value, values, midpoint, max); else if (values[midpoint] == value) return 0; else return 2; } 

你最初编写代码的方式,递归调用的返回值被完全忽略, return 3; 声明将被执行。