表示A = {1,2,3,4}
和函数调用b_search(3, 0, arr.size() - 1, arr) //arr being a vector
。
当我在函数内打印mid
时,它返回2,但当我返回mid
代替打印mid
时,它返回值0.
int b_search(int tbs, int p, int q, vector<int> A){
if (p < q) {
int mid = p + (q - p) / 2;
if (A[mid] == tbs){
return mid;
} else if (tbs < A[mid]) {
b_search(tbs, 0, mid - 1, A);
} else {
b_search(tbs, mid + 1, q, A);
}
}
}
答案 0 :(得分:4)
你应该使用return
递归调用。你正在进行递归调用,但是没有收集那些递归调用返回的值。你假设后续调用(递归)将返回main的答案但是它会继续将ans返回到您正在进行递归调用的位置。在这一点上,您应该收集答案并将其返回到main。
else if(tbs<A[mid]){
return b_search(tbs,p,mid-1,A);//note the return
}else{
return b_search(tbs,mid+1,q,A);//note the return
也应该是
b_search(tbs,p,mid-1,A)
而不是
b_search(tbs,0,mid-1,A)