0

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

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

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;

4

2 回答 2

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)它会根据所有元素的总数计算实际平均值

于 2013-03-17T10:44:40.697 回答
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); 
}

或者在最后分开:(无论是肖恩兰德斯曼建议的方式,还是如下所示)

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);
于 2013-03-17T11:00:38.847 回答