这是QQ上看到的问题,最初是这么想的:
double Average(double x[],int n)
{
if(n != 0){
return ((Average(x,n-1))*n+x[n])/(n+1);
}
return x[0];
}
后来要求使用分治的思想解决问题,最直接的想法是这样的:
double Average(double x[],int start,int end)
{
double a,b,c;
if(start == end){
return x[start];
}
a=Average(x,start,(end+start)/2);
a*=(end-start)/2+1;
b=Average(x,(end+start)/2+1,end);
b*=(end-start)/2;
c=(a+b)/(end-start+1);
return c;
}
但怎么测试都不对,后来改成这样就OK了:
double Average(double x[],int start,int end)
{
double a,b,c;
if(start == end){
return x[start];
}
a=Average(x,start,(end+start)/2);
a*=((end+start)/2-start+1);
b=Average(x,(end+start)/2+1,end);
b*=(end-(end+start)/2);
c=(a+b)/(end-start+1);
return c;
}
纯当是练习