c - C中递归二进制搜索算法中的段错误

标签 c arrays recursion binary-search

这是一个带有递归二进制搜索算法的 C 程序,但是当我运行它时,调试器说二进制搜索函数中存在访问段错误。为什么会这样,我该如何解决?

这是递归二分查找函数:

int binSearch(int val, int numbers[], int low, int high)                 
{
     int mid;

     mid=(low+high)/2;
     if(val==numbers[mid])
     {  
                return(mid);          
     }   
     else if(val<numbers[mid])
     {
                return(binSearch(val, numbers, low, mid-1));               
     }            
     else if(val>numbers[mid])
     { 
                return(binSearch(val, numbers, mid+1, high));  
     }    
     else if(low==high)
     {
                return(-1);    
     }
}

谢谢你:)

最佳答案

你必须检查low == high之前 val < ...val > ...因为否则high可能会小于 low所以你的下一个递归可能会计算出一个无效的 mid

关于c - C中递归二进制搜索算法中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17830282/

相关文章:

c - 构建我自己的 scanf 函数

arrays - 细菌数量玻璃覆盖率

Java 堆栈/嵌套计数

c - 如何检查文本文件中的字符串是 int、float 还是 none(string)?

将 double 转换为 int 而不四舍五入

PHP、mySQL、Google map 代码打印出 "Array",而不是数据值

c - 为什么解引用指向字符串(char数组)的指针会返回整个字符串而不是第一个字符?

arrays - 如何将 *big.Int 转换为 golang 中的字节数组

c++ - 编译器是否保证优化模板生成的递归代码?

c# - gcroot 和/clr 混合模式和 C++ 包装器是从纯 C 到 C# 的最短路径吗?