簡體   English   中英

用Java計算系列?

[英]Computing a series in Java?

我正在嘗試創建一個遞歸方法來計算java 1 / i中的一個序列。

這是我的代碼:

public static double computeSeries(int n) {
    if (n == 1)
        return 1;
    else
        return (1/n) + computeSeries(n - 1);

}

其中'n'通過main方法傳遞。 但它並沒有完全正常工作。 我輸入3時的FE,它返回2.0,我計算它為1.8,如果我使用2,它給我1.0

當你打算使用小數時,你可能至少想要一個double輸入


public static double computeSeries(double n)

但是,如果您只希望方法具有int作為輸入,您可能希望將1/n更改為1.0/n這將導致類型為double而非int

這稱為促銷


JLS§5.6.2

如果任一操作數的類型為double,則另一個操作數轉換為double。

結果的第一部分(1 / n)被截斷為int:

    return (1/n) + computeSeries(n - 1);

通過將1更改為1.0(然后是雙精度)來強制計算雙重類型:

    return (1.0/n) + computeSeries(n - 1);    
1/n

你是用整數計算的。 除非n == 1,否則它始終為零

在大多數情況下,你的第一個分區將為0 ,因為你用整數計算。

而是使用其中之一

  • return (1.0 / n) + computeSeries(n - 1);
  • return (1 / (double) n) + computeSeries(n - 1);
  • public static double computeSeries(double n) {

額外:您應該注意n = 0以防止java.lang.ArithmeticException

正如大多數人所說的那樣,您需要在執行操作之前將值轉換為double 此外,這可能只是個人喜好,你可能不希望有n的通話computeSeries運行他們都可以完成之前。

編輯:在考慮更多之后,如下所示使用for循環,不需要額外的方法來計算系列中的每個術語。 您可以簡單地執行以下操作

public static double computeSeries(int n) {
    double sum = 0.0;
    for(int i=1; i<=n; i++){
        sum += (1.0/(double)i);
    }
    return sum;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM