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),因此n
为5
。
所以这个被调用: 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;
声明将被执行。