|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
int a[16]={0,5,6,8,10,13,18,22,26,27,29,30,36,58,59,87};
void search(int x,int y,int num){
int index = (x+y)/2;
if(a[index]==num){ a[0]=index; return; }
if(x==y) return;
if(a[index]>num) search(x,index,num);
else if(a[index]<num) search(index,y,num);
}
int main(){
search(1,15,60);
if(a[0]!=0){
printf("%d,在第%d个!\n",a[a[0]],a[0]);
}
else{
printf("查无此数!\n");
}
}
这段在查找成功的时侯可以成功输出,但是在查找失败却输出失败,求大佬们解答!
问题出在搜索函数的递归调用上。在搜索函数中,当a[index]>num时,应该递归调用search函数时将y参数设为index-1,而不是y参数设为index。同样地,当a[index]<num时,应该递归调用search函数时将x参数设为index+1,而不是x参数设为index。
以下是修改后的代码:
#include <stdio.h>
int a[16]={0,5,6,8,10,13,18,22,26,27,29,30,36,58,59,87};
void search(int x, int y, int num){
int index = (x+y)/2;
if(a[index] == num){
a[0] = index;
return;
}
if(x == y)
return;
if(a[index] > num)
search(x, index-1, num);
else if(a[index] < num)
search(index+1, y, num);
}
int main(){
search(1, 15, 60);
if(a[0] != 0){
printf("%d,在第%d个!\n", a[a[0]], a[0]);
}
else{
printf("查无此数!\n");
}
return 0;
}
这样修改后,当查找失败时会正确输出"查无此数!"。
|
|