a)试分别采用迭代和递归两种模式设计算法,在线性时间内解决该问题
减而治之(蛮力迭代版):
int Max(int A[],int max,int a){
for (int n = 0; n <= A.length--; n++){ //迭代n次,遍历数组A,每次都
max = A[n]; //令首项为最大值
if (A[n+1] > max) //比较当前max与后项的值
max = A[n+1]; //令max为较大值
return max;
}
}
减而治之(蛮力递归版):
int Max2(int A[],int n){
if (2 > n) //平凡情况,递归基
return A[n-1]; //直接计算
else //一般情况,递归:在前n-1 项中的最大值与第n-1项之间,取最大者
return max( Max2(A,n-1),A[n-1]);
}//
二分递归版:
int maxR(int A[], int lo,int hi){
if (lo +1 = hi)
return A[lo];
else{
int mi = (lo + hi) >> 1;
return max( maxR(A,lo, mi),maxR(A,mi,hi));
}
}