[英]Summation of a series given n as number of terms (recursion)
我需要做一個遞歸函數,用公式計算一系列的和:
(3x-1)/ 2(x + 1)/ * x每循環增加,x從1 * /開始
例如:如果輸入2,則答案必須為[(2/4)+(5/6)]中的1.3333
我已經為執行該操作的函數編寫了代碼,但是對於值0-2輸出0.0,對於大於2的所有值輸出1.0。
public double summation(int intN){
if(intN == 0)
return dbSum;
else {
dbSum = ((3*intX)-1)/(2*(intX+1));
intX++;
}
return (summation(intN - 1));
}
我迫切需要幫助。 提前致謝。
如果打算增加dbSum
,則應使用遞增運算符:
dbSum += ((3*intX)-1)/(2*(intX+1));
^ Here
此外,您實際上正在執行整數除法: (2/4)+(5/6) == 0 + 0 == 0
,而不是1.333...
,即使您將其分配給double
。 您需要強制分子和分母中的至少一個為雙精度:
dbSum += ((3.0*intX)-1)/(2.0*(intX+1));
請注意,此代碼中存在初始化問題以及線程安全問題,因為您使用的是成員變量來保存結果:首先需要確保dbSum == 0
,並且沒有其他線程同時調用該方法。 如果不使用成員變量,則將更加安全:
public double summation(int intN){
if(intN == 0)
return dbSum;
else {
return ((3.0*intX)-1)/(2.0*(intX+1)) + summation(intN - 1);
}
}
(您也可以遞歸地寫它;盡管在Java中並不能真正幫到您)。 總體而言, for
循環將是更好的策略,但是我想這是遞歸的練習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.