这类问题在数学中很常见,例如求 n!
算法如下:
long fact(int n)
{ if(n==1)
return 1; //第一部分
else
return n*fact(n-1); //第二部分,递归
}
在该式中,f(n-1)的计算与原问题f(n)的计算相似,只是规模更小。
显然,若k1 = k2,即数组中只有一个元素,则A[k1]就是最大元素;若k1 < k2,则用类似的方法先求出A[k1+1]--A
[k2]中的最大者m,然后令m与A[k1]进行比较,二者中的最大者即为所求。
算法如下:
int maxint(int A[],int k1,int k2) //求A[k1]--A[k2]中的最大者,并返回
{ if(k1 == k2)
return A[k1];
else {
m = maxint(A,k1+1,k2);
return(A[k1] > m)?A[k1]:m;
}
}
