2013-03-17 104 views
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;

+0

1項陣列的平均是物品的只是值。將剩餘價值的平均值與當前項目相結合的公式也是錯誤的 – 2013-03-17 10:33:54

回答

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,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);