我需要创建一个递归函数来计算具有公式的系列之和:
(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));
}
我迫切需要帮助。提前谢谢。
答案 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
循环总体来说是一个更好的策略,但我想这是一个递归练习。