二分查找(递归)
程序员文章站
2022-03-14 11:03:43
...
代码1
#include <iostream>
using namespace std;
int BinSearch(int a[], int bin, int end, int aim){
if(bin<=end){
int mid = (bin + end) / 2;
if(aim<a[mid]){
cout<<"<"<<endl;
return BinSearch(a, 0, mid, aim);
}
else if(aim>a[mid]){
cout<<">"<<endl;
return BinSearch(a, mid + 1, end, aim);
}
else if(aim == a[mid]){
cout<<"="<<endl;
return mid;
}
}
else
return -1;
/*int mid;
while(bin<end){
mid = (bin + end) / 2;
if(aim>a[mid]){
bin = mid + 1;
}
else if(aim<a[mid]){
end = mid;
}
else
return mid;
}*/
}
int main(){
//freopen("in.txt", "r", stdin);
int a[10];
for(int i=0;i<10;i++){
cin>>a[i];
}
int x;
cin>>x;
cout<<BinSearch(a,0,9,x)<<endl;
//fclose(stdin);
return 0;
}
代码2
#include <iostream>
using namespace std;
int BinSearch(int a[], int bin, int end, int aim){
int mid = (bin + end) / 2;
if(aim<a[mid]){
cout<<"<"<<endl;
BinSearch(a, 0, mid, aim);
}
else if(aim>a[mid]){
cout<<">"<<endl;
BinSearch(a, mid + 1, end, aim);
}
else{
cout<<"="<<endl;
return mid;
}
}
int main(){
//freopen("in.txt", "r", stdin);
int a[10];
for(int i=0;i<10;i++){
cin>>a[i];//给数组赋值
}
int x;
cin>>x;//输入要查询的数
cout<<BinSearch(a,0,9,x)<<endl;
//fclose(stdin);
return 0;
}
这两段代码实现的功能差不多,内容方面只有递归的返回值方面有些不同。代码1中的每次调用前面都有return,eg: return BinSearch(a, 0, mid, aim);
而代码2的调用前面没有return,eg: BinSearch(a, 0, mid, aim);
但最后的结果都是一样的。代码2没有考虑要查询的数不存在的情况,但主要问题不在这,所有就没改正。所以关于这个return,有点迷糊了,哪位大神可以帮忙解决一下?不胜感激