我研究了一种递归算法,该算法检查排序的给定数组中是否存在某个值(键),看起来像这样:
int bin_search_rec(int key, int *a, int n)
{
if (n==0)
return 0;
if (key=a[n/2])
return key;
if (key<a[n/2])
return bin_search_rec(key,a,n/2);
else
return bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
}
我还研究了上面的算法可以修改-不仅可以检查数组中是否存在某个值,还可以返回该值的索引(如果存在的话):
int bin_search_rec(int key, int *a, int n)
{
int pos;
if (n==0)
return -1;
if (key=a[n/2])
return key;
if (key<a[n/2])
return bin_search_rec(key,a,n/2);
else
pos= bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
if (pos==-1)
return -1;
else
return pos+ n/2 +1;
}
我不明白为什么在此修改中我们需要使用变量pos才能找到键的索引。 用这种方式修改算法为什么会出错:
int bin_search_rec(int key, int *a, int n)
{
if (n==0)
return -1;
if (key=a[n/2])
return n/2;
if (key<a[n/2])
return bin_search_rec(key,a,n/2);
else
return bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
}