你将如何编写一个递归函数来计算数组元素的平均值?
这是我到目前为止所拥有的:
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;
这个怎么样:
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,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);