Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归二值搜索中分割错误的处理_C++_Binary Search - Fatal编程技术网

C++ 递归二值搜索中分割错误的处理

C++ 递归二值搜索中分割错误的处理,c++,binary-search,C++,Binary Search,如何防止递归二进制搜索在数组中找不到要查找的数字时出现分段错误 int recursive_binary_search(int A[], int beg, int end, int key) { if(end < beg) return -1; int mid = beg + end / 2; if(A[mid] == key) return mid; else if(A[mid] > key) retu

如何防止递归二进制搜索在数组中找不到要查找的数字时出现分段错误

int recursive_binary_search(int A[], int beg, int end, int key)
{
    if(end < beg)
        return -1;
    int mid = beg + end / 2;
    if(A[mid] == key)
        return mid;
    else if(A[mid] > key)
        return recursive_binary_search(A, beg, mid - 1, key);
    else
        return recursive_binary_search(A, mid + 1, end, key);
}
int递归二进制搜索(int A[],int beg,int end,int key)
{
如果(结束键)
返回递归二进制搜索(A,beg,mid-1,key);
其他的
返回递归二进制搜索(A,mid+1,end,key);
}

以下代码可能就足够了

int recursive_binary_search(int A[], int beg, int end, int key)
{
    if(end < beg)
        cout<<"\nKey not Found";
    int mid = beg + end / 2;
    if(A[mid] == key)
        return mid;
    else if(A[mid] > key)
        return recursive_binary_search(A, beg, mid - 1, key);
    else
        return recursive_binary_search(A, mid + 1, end, key);
}
int递归二进制搜索(int A[],int beg,int end,int key)
{
如果(结束结果我忘记了
()
中的
定义

将定义更正为

int mid = (beg + end) / 2;

解决了这个问题。

你处理调用函数的
std::exception
吗?让我把那部分去掉。你的mid不是一个中间-beg+end周围缺少的括号“end”是指列表中的最后一个条目,还是像stl一样-是结尾后的条目?如果是后者,你不应该写
如果(end,例如,如果A中有一个元素,beg=0,end=1?