作者:龚magnett_672 | 来源:互联网 | 2023-05-17 13:38
做二分查找时发现一个程序崩溃的问题:正确代码,参考自http:blog.csdn.netq3498233articledetails4419285intBinSearch(
做二分查找时发现一个程序崩溃的问题:
//正确代码,参考自http://blog.csdn.net/q3498233/article/details/4419285
int BinSearch(int Array[],int low,int high,int key/*要找的值*/)
{
if (low<=high)
{
int mid = (low+high)/2;
if(key == Array[mid])
return mid;
else if(key
return BinSearch(Array,low,mid-1,key);
else if(key>Array[mid])
return BinSearch(Array,mid+1,high,key);
}
else
return -1;
}
int main()
{
int array[]={1,2,3,4,5,6,7,8,9};
cout<
return 0;
}
改成
else if(key
return BinSearch(Array,low,mid,key);
else if(key>Array[mid])
return BinSearch(Array,mid,high,key);
在codeblocks上运行程序崩溃,谁给解释一下。
5 个解决方案
参考
C:\Microsoft SDK\src\crt\bsearch.c
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\bsearch.c
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\BSEARCH.C
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\bsearch.c
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\bsearch.c
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\bsearch.c
举个简单的例子如果array初始化为{1,2}。你一步一步运行就会发现这个递归无法结束,你如果看堆栈情况的话就会发现好多函数压栈但无法弹出,最终栈内存不足出现崩溃。递归必须保证每次实现都会把规模缩小,这里就是通过mid+1,mid-1实现的。