![](/img/trans.png)
[英]why is java.lang.StackOverflowError given in the computing of pi using the Taylor series expansion?
[英]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
結果的第一部分(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.