问答题
编写一个在顺序表上执行顺序查找的递归算法,在算法的参数表中增加一个整数形参loe,指明查找的开始位置。函数的首部为:
int seqSearch1 (seqList &L, DataType x, int loc);其中,DataType是顺序表中每个元素的数据类型,假设已经定义可直接使用。
【正确答案】
【答案解析】使用递归算法实现顺序查找的基本思想是:先判断是否检测到表尾,是则返回L.n,表示查找失败,次数loc(0≤loc≤L.n-1)停留在L.n位置,函数返回-1。不是则再判断位于loc位置的元素的关键字是否等于x,是则查找成功,返回元素的位置。否则算法递归检测下一个位置loc+1。该递归算法的调用语句形式为:
int Pos=seqSearch1(L,x,0);
int seqSearchl(seqList &L,DataType x,int loc){
if(loc>=L.n)return-1; //查找不成功
else if(L.data[loc]==x)return loc; //查找成功
else return seqSearchl(L,x,loc+1); //继续递归查找
}
每次递归,查找区间的左端点向待查找元素所在位置逼近一个位置,直到递归到达待查找元素所在位置,查找成功。如果递归下去,直到查找区间为空(loc==L.n),查找失败。函数返回找到的位置。算法的递归深度与待查找元素在表中的位置有关,最好情形是一开始就找到待查找元素,递归深度为l;最坏情形是递归深度等于表的长度O(n)。