簡體   English   中英

給定n作為項數的系列的總和(遞歸)

[英]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.

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