2015-07-04 39 views
-1

對於A = {1,2,3,4}和函數調用b_search(3, 0, arr.size() - 1, arr) //arr being a vector。 當我打印mid返回2,但是當我在地方印刷mid的返回mid返回值的函數內部0爲什麼這個簡單的二進制搜索不能返回正確的mid值正確值?

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); 
     } 
    } 
} 
+2

打開你的編譯器警告,它會提醒你有關丟失的回報。 – Jarod42

回答

4

你應該使用return遞歸calls.You正在遞歸調用,但沒有收集從這些遞歸調用返回的值。假設後續調用(遞歸)將返回到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) 
相關問題