递归二进制搜索不能正常工作

时间:2014-04-30 10:15:27

标签: c recursion binary-search

int BinarySearch(int A[], int p, int r, int value)
{
    int q = (p + r) / 2;

    if (A[q] == value)
    {
        return q;   //value found
    }
    if (p == q) 
    {
        return 0;   //not found
    }
    if (A[q] > value)
    {
        return BinarySearch(A, p, q, value);
    }
    else
    {
        return BinarySearch(A, q + 1, r, value); 
    }
} //binary search ends here

现在,问题在于每当我想搜索数组的最后一个元素时,此代码都会出错。 任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:0)

根据第一个索引p和最后一个索引r制作搜索结束案例,

int BinarySearch(int A[], int p, int r, int value)
{
    int q = (p + r) / 2;
    if( p > r )
    {
      return 0;
    }
    if (A[q] == value)
    {
        return q;   //value found
    }
    if (A[q] > value)
    {
        return BinarySearch(A, p, q-1, value);
    }
    else
    {
        return BinarySearch(A, q + 1, r, value); 
    }
}