使用递归函数计算数组的平均值

时间:2013-03-17 10:26:03

标签: c function recursion average

你如何编写一个递归函数来计算数组元素的平均值?

这是我到目前为止所拥有的:

int media(int numeros[], int i, int n) {
    if (i == n-1) return numeros[i]/n;  
    return numeros[i]/n + media(numeros, i + 1, n); 
}

但它不起作用,我认为这是因为行if (i == n-1) return numeros[i]/n;

2 个答案:

答案 0 :(得分:2)

这个怎么样:

double media(int numeros[], int i, int n) {
    if (i == n - 1) {
        return numeros[i];
    }

    if (i == 0)
        return ((numeros[i] + media(numeros, i + 1, n)) / n);
    else
        return (numeros[i] + media(numeros, i + 1, n));
}

你正在做的是除以每次调用的元素数量 - 这样做会给你不正确的平均值。上面的代码执行您正在执行的操作,但是当它即将返回结果时(i==0时)它将根据所有元素的总和计算实际平均值

答案 1 :(得分:1)

问题在于,如果你划分每个元素,因为舍入(到整数),你很可能得到一个不正确的答案(整数除以整数返回整数)。

对于{1,2,3,4},我们将每个元素除以4 - 1/4 + 2/4 + 3/4 + 4/4,但每个除法返回一个整数,所以它们都是0,结果是0。

所以,要么使它成为double(但由于四舍五入,最后也会更好地划分)

double media(int numeros[], int i, int n){
   if (i == n-1) return 1.0*numeros[i-1]/n;  
   return 1.0*numeros[i]/n + media(numeros, i + 1, n); 
}

在最后划分:(无论是Sean Landsman建议的方式,还是如下所示)

int media(int numeros[], int i, int n){
   if (i == -1) return media(numeros, 0, n)/n;
   if (i == n-1) return numeros[i-1];
   return numeros[i] + media(numeros, i + 1, n);
}

呼叫者:

int media(array, -1, n);