2013-09-25 40 views
0

我知道我忽略了一些非常基本和基本的東西,但我需要幫助創建一個平均函數,只使用一個參數(在這種情況下,包含整數的列表),計算給定整數的平均值。以遞歸方式保持Java的計數 - 簡單

public static double mean (Cons lst) { 
    int total = (Integer) lst.data; 
    int count = //something to keep count through the recursion 

    if(lst.next == null) { 
     return total/count; 
    } 

    else return mean(lst.next); // return statement isn't correct, need help here as well 
} 

任何幫助將是偉大的。如果最簡單的解釋方法是通過編寫方法本身,那麼這將是美好的,但我只是想知道如何遞歸地保持運行計數而不添加參數

非常感謝。

+3

爲什麼你想程序是遞歸的?計算int數組的平均值通常是在一個簡單的循環中完成的... – isnot2bad

+0

爲什麼要以遞歸方式執行此操作? – Kippie

回答

0

您正在開發遞歸平均函數作爲Java類的一個方法。你爲什麼不聲明你的計數和總局部變量作爲該類的屬性?

class Mean { 

    static int total = 0; 
    static int count = 0; 

    public static double mean (Cons lst) { 
     total += (Integer) lst.data; 
     count += 1; 
     if(lst.next == null) { 
      double ret = total/count; 
      total = 0; 
      count = 0; 
      return ret; 
     } 
     return mean(lst.next); // return statement isn't correct, need help here as well 
    } 
} 

其他選項是將「count」作爲遞歸方法的第二個參數。如果您不希望用戶傳遞更多參數,請使用兩種方法:帶有一個參數(您的列表)的「mean」方法應該調用包含您的實現的第二種方法「recursiveMean(list,0)」。

public static double mean (Cons lst) { 
    return recursiveMean (lst, 0, 0) 
} 

public static double recursiveMean (Cons lst, int count, int total) { 
    total += (Integer) lst.data; 
    count += 1; 
    if(lst.next == null) { 
     return total/count; 
    } 
    return mean(lst.next,count,total); // return statement isn't correct, need help here as well 
}  

不過,我不明白你爲什麼要實現平均功能遞歸函數,除非它是某種形式的教育運動。

+0

謝謝。我試圖在沒有局部變量的情況下做到這一點,但沒有辦法。以爲我錯過了什麼,不要猜測。是的,這是一項教育工作。 –