如何編寫計算數組元素平均值的遞歸函數?使用遞歸函數計算數組的平均值
這是我到目前爲止有:
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;
如何編寫計算數組元素平均值的遞歸函數?使用遞歸函數計算數組的平均值
這是我到目前爲止有:
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);
1項陣列的平均是物品的只是值。將剩餘價值的平均值與當前項目相結合的公式也是錯誤的 – 2013-03-17 10:33:54