2017-04-01 122 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

谢谢,陌生人!这解决了它。祝您有美好的一天/晚上! –