一个简单的二分查找问题

「已注销」 2014-06-16 05:58:35
做二分查找时发现一个程序崩溃的问题:

//正确代码,参考自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<Array[mid])
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<<BinSearch(array,1,9,19)<<endl;
return 0;
}

改成

else if(key<Array[mid])
return BinSearch(Array,low,mid,key);
else if(key>Array[mid])
return BinSearch(Array,mid,high,key);

在codeblocks上运行程序崩溃,谁给解释一下。
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-06-16
  • 打赏
  • 举报
回复
引用 4 楼 wsx199397 的回复:
举个简单的例子如果array初始化为{1,2}。你一步一步运行就会发现这个递归无法结束,你如果看堆栈情况的话就会发现好多函数压栈但无法弹出,最终栈内存不足出现崩溃。递归必须保证每次实现都会把规模缩小,这里就是通过mid+1,mid-1实现的。
哦,了解了,多谢
Henryinferno 2014-06-16
  • 打赏
  • 举报
回复
举个简单的例子如果array初始化为{1,2}。你一步一步运行就会发现这个递归无法结束,你如果看堆栈情况的话就会发现好多函数压栈但无法弹出,最终栈内存不足出现崩溃。递归必须保证每次实现都会把规模缩小,这里就是通过mid+1,mid-1实现的。
赵4老师 2014-06-16
  • 打赏
  • 举报
回复
库函数源码一般都写得比较经典。
「已注销」 2014-06-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
参考 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
这个是库函数吧?
赵4老师 2014-06-16
  • 打赏
  • 举报
回复
参考 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

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧