题目
关于浮点型数组A[0, .. , n-1],设计实现下列运算的递归算法:
(1)求数组A中的最大值;
(2)求数组中n个数之和;
(3)求数组中n个数的平均值。
分析
(1)如果数组长度为1,则可以直接返回最大值;否则将数组A视为两部分,即A[0]和A[1, ... , n-1]。如果A[0]大于A[1, ... , n-1]中的最大值,则返回A[0],否则返回A[0],反之按照上一步的方法递归地处理A[1]和A[2, ... , n-1]。
(2)如果数组长度为1,则可以直接返回求和结果;否则将数组A视为两部分,即A[0]和A[1, ... , n-1]。递归地处理A[1, ... , n-1]中n-1个数的和,使之与A[0]相加得到最终结果。
(3)如果数组长度为1,则可以直接返回平均值结果。否则将数组A视为两部分,即A[0]和A[1, ... , n-1]。递归地处理A[1, ... , n-1]中n-1个数的平均值tempavg,通过(tempavgx(n-1)+A[0])/n即可求得数组A中所有数的平均值。
代码
#include<stdio.h>
/* 2.题目 */
float findMax(float A[],int i,int j){
float max;
if(i==j){
return A[i];
}else{
max=findMax(A,i+1,j);
if(A[i]>max){
return A[i];
}else{
return max;
}
}
}
float arraySum(float A[],int i,int j){
if(i==j){
return A[i];
}else{
return A[i]+arraySum(A,i+1,j);
}
}
float arrayAvg(float A[],int i,int j){
if(i==j){
return A[i];
}else{
return (A[i]+(j-i)*arrayAvg(A,i+1,j))/(j-i+1);
}
}
int main(){
float A[]={1,2,3};
int n=3;
float max=findMax(A,0,n-1);
printf("最大值:%2.f\n",max);
float sum=arraySum(A,0,n-1);
printf("总和:%2.f\n",sum);
float avg=arrayAvg(A,0,n-1);
printf("平均值:%2.f\n",avg);
}