给定n作为项数(递归)的系列的求和

时间:2016-07-08 05:25:15

标签: java function recursion

我需要创建一个递归函数来计算具有公式的系列之和:

(3x-1)/ 2(x + 1)/ * x每个周期增加,x从1 * /

开始

例如:如果您输入2,答案必须是[(2/4)+(5/6)]

的1.3333

我已经为执行操作的函数创建了一个代码,但是对于大于2的所有内容,它为值0 - 2和1.0输出0.0。

public double summation(int intN){
    if(intN == 0)
        return dbSum;
    else {
        dbSum = ((3*intX)-1)/(2*(intX+1));
        intX++;
    }
    return (summation(intN - 1));
}

我迫切需要帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您打算增加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循环总体来说是一个更好的策略,但我想这是一个递归练习。