int search(int a[], int low, int high, int x) {
int middle;
while (low <= high) {
middle = (low + high) / 2;
if (x<a[middle]) {
search(a, low, middle - 1, x);//要将这里改成high=middle-1;search(a,low,high,x);
}
if(x>a[middle])
{
search(a, middle + 1, high, x);//要将这里改成low=middle+1;search(a,low,high,x);
}
if(x==a[middle])
return middle;
}
return middle;
}
上面的原代码改动了才对,请教不改是哪里的问题??
了解一下递归的机制吧
不修改high或low的值的话,等到返回该层时,low还是小于high
懂了,是这样的
调试一下,没觉得哪里不对
因为我的用原码不能出结果,改了之后才可以,请问你用未改动的代码可以运行么
@小同1: 可以啊,没觉得哪里不对,你调试一下试试
@不知道风往哪儿吹: 我试了一下,但是编译通过的,发现还是不能查找,输入要查找的数就没有结果了
@小同1:
1 int middle; 2 3 while (low <= high) 4 { 5 6 middle = (low + high) / 2; 7 8 if (x < a[middle]) 9 { 10 11 return search(a, low, middle - 1, x); 12 //要将这里改成high=middle-1;search(a,low,high,x); 13 14 } 15 16 if (x > a[middle]) 17 { 18 19 return search(a, middle + 1, high, x); 20 //要将这里改成low=middle+1;search(a,low,high,x); 21 22 } 23 24 if (x == a[middle]) 25 { 26 return a[middle]; 27 } 28 } 29 return 0;
@不知道风往哪儿吹: 我觉得确实是不对的,楼下那种说法有道理的