c语言题目是已知顺序表L含有n个整数,试分别以函数形式写出下列运算的递归算法: (设传入参数:顺序表L,初始参数值k) (10分)求表中的最大整数int Max(SqList &L, int k);
时间: 2024-05-30 20:15:15 浏览: 110
L, int k) {
int max;
if(k==L.length) //边界条件,遍历到表尾,返回表头元素作为最大值
return L.elem[0];
max = Max(L, k+1); //递归调用,从下一个位置开始遍历
if(L.elem[k] > max) //比较当前位置的元素与目前的最大值,更新最大值
max = L.elem[k];
return max; //返回最大值
}
//求表中的所有整数之和
int Sum(SqList L, int k) {
if(k==L.length) //边界条件,遍历到表尾,返回0
return 0;
return L.elem[k] + Sum(L, k+1); //递归调用,从下一个位置开始遍历,累加元素值
}
//将表中所有元素逆置
void Reverse(SqList L, int k) {
int temp;
if(k >= L.length/2) //边界条件,循环至表中间位置
return;
temp = L.elem[k]; //交换两端的元素
L.elem[k] = L.elem[L.length-1-k];
L.elem[L.length-1-k] = temp;
Reverse(L, k+1); //递归调用,从下一个位置开始交换
}
//删除表中数值为x的所有元素
void Delete(SqList &L, int x, int k) {
if(k == L.length) //边界条件,遍历完所有元素,结束递归
return;
if(L.elem[k] == x) { //如果当前元素值为x,删除该元素,表长减1,当前位置不变
L.length--;
for(int i=k; i<L.length; i++)
L.elem[i] = L.elem[i+1];
Delete(L, x, k); //递归调用,从当前位置继续删除x元素
}
else //如果当前元素值不为x,继续遍历下一个元素
Delete(L, x, k+1);
}
阅读全文