C++ 递归二进制搜索溢出c++;

C++ 递归二进制搜索溢出c++;,c++,binary-search,C++,Binary Search,我试图递归地实现binarysrach,但是我得到了堆栈溢出 首先,我有一个使用3个参数的find函数。然后我在main中调用这个函数,并从数组中传递地址。坚果,我的堆栈溢出了 bool find( const int x, const int* pBegin, const int* pEnd) { int medel =((*pBegin) + (*pEnd -1))/2 ; if(x == medel) return true ; else

我试图递归地实现
binarysrach
,但是我得到了堆栈溢出

首先,我有一个使用3个参数的
find
函数。然后我在
main
中调用这个函数,并从数组中传递地址。坚果,我的堆栈溢出了

bool find( const int x, const int* pBegin, const int* pEnd)
{    
    int medel =((*pBegin) + (*pEnd -1))/2 ;

    if(x == medel)
        return true ;

    else if( x<medel)
    {
        int last = medel -1 ;
        return find(x, pBegin, &last);
    }
    else if( x > medel) 
    {
        int begin = medel +1;
        return find(x, &begin, pEnd);
    }


}// find

void main()
{    
    int arr[10];
    for (int i=0;i<10;++i)
        arr[i] = i;
    bool found = find(3, &arr[0], &arr[10]);
    cout << "hittat = " << found << endl;

    system("pause");
}
bool find(常量int x,常量int*pBegin,常量int*pEnd)
{    
int-medel=(*pBegin)+(*pEnd-1))/2;
if(x==medel)
返回true;
else if(x medel)
{
int begin=medel+1;
返回find(x,begin,pEnd);
}
}//发现
void main()
{    
int-arr[10];

对于(int i=0;i在代码中使用指针有几个非常基本的问题。在不为您修复代码的情况下,我将给您一个提示:


尝试将
medel
转换为指向中间元素的指针。这可能有助于解决一些混淆问题。

在代码中使用指针有几个非常基本的问题。尝试通过在find函数的入口处打印指针的值以及指针之间的值来调试问题(因此您可以看到搜索的位置)并键入计算值(如您的示例中的“medel”)。但我无法从两个指针(pEnd、pBegin)计算出medel。在这种情况下,您可以通过将范围和结束指针之间的距离加一半来计算指向中间元素的指针。您可以得到(整数)通过减法计算指针之间的距离。您还必须确保只处理数组中的指针。只有当两个指针指向同一数组时,距离才是明确定义的。在代码中,结束和开始获取局部自动变量的地址,这些地址与数组中的地址完全无关。