我有一个搜索功能,它使用递归对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);
为了验证,我将values[5]
设置为等于{3, 11, 32, 54, 66}
,将value
设置为3
(即应该返回0),然后将n
设置为5
是recurseSearch(3, values, 0, 5);
。
所以这被称为:0
现在我希望最终返回并打印3
,因为midpoint
确实在数组中。在调试之后,一切都很顺利,直到values[midpoint] == value
为0,因此return 0
为真,因此}
行应运行。然而,相反的是它确实发生了,但随后comtrolly显然移动到函数的末尾(关闭return 3;
),但随后向上移动并在线运行return 0
(此处)21。
我无法理解为什么return 3
语句不会退出函数以及为什么return 3;
根本没有运行
N.B。删除make
行可以解决此问题,但是这会导致clang抱怨,而且我正在使用的命令(function ToggleHistory(button)
{
console.log(button);
var x = $(button).prev();
var y = $(button).closest('table').find('.trackingHistory');
//var z = $(button).closest('.trackingHistory');
console.log(x);
console.log(y);
console.log($(y).attr('id'));
//console.log(z);
}
)致命一个混蛋,我宁愿避免
答案 0 :(得分:1)
我没有仔细查看您的代码,因此可能存在其他错误,但听起来您希望最深的递归调用的返回值一直向上传递给调用者。在这种情况下,您将删除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;
语句将被执行。