2017-04-01 121 views
2

我一直在嘗試使用遞歸(對我來說是新概念)整天在C.寫一個二進制搜索我研究了很多與此想出了:遞歸二進制搜索/ C

int binary_search(int *parr, int value, int left, int right){ 
    int middle = (left+right)/2; 
    if(*(parr+middle)==value){ 
     return 1; 
    } 
    if(right<left){ 
     return 0; 
    } 
    if(*(parr+middle)>value){ 
     return binary_search(*parr, value, left, middle-1); 
    } 
    else{ 
     return binary_search(*parr, value, middle+1, right); 
    } 
} 

這是我的主要功能:

int main() 
{ 
    int arr[maxbr],n, i, g; 
    do{ 
     printf("\n n="); 
     scanf("%d", &n); 
    } while(n>maxbr); 

    for(i=0; i<n; i++){ 
     printf("\n a[%d]", i); 
     scanf("%d", &arr[i]); 
    } 

    g = binary_search(arr, 5, 0, n-1); 
    printf(" %d", g); 
} 

由於某種原因,輸入n和數組後,崩潰。先謝謝您的幫助!

+0

什麼是'maxbr'?您是否嘗試過使用調試器來捕捉崩潰並查看它發生的位置? –

+0

請閱讀警告並採取行動。如果他們說你做錯了什麼,那你很可能會這樣做。 –

+0

我使用#define maxbr 100(例如)來定義數組可以具有的最大元素數量。 –

回答

2

你可能想:

return binary_search(parr, value, left, middle-1); 

沒有在帕爾的前面*。 * parr是第一個int,parr是數組。

(修復另一個)

+0

謝謝,陌生人!這解決了它。祝您有美好的一天/晚上! –