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