|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
这样修改后,当查找失败时会正确输出"查无此数!"。
|
|