给定n个项数的序列的java求和(递归)
我需要做一个递归函数,用以下公式计算一系列的和:
(3x-1)/2(x+1)/*x每循环增加,x从1开始*/
例如:如果输入2,则答案必须是1.3333 from[(2/4)+(5/6)]
我已经为执行该操作的函数编写了代码,但是对于值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));
}
我非常需要帮助。提前谢谢
# 1 楼答案
如果要递增
dbSum
,应使用递增运算符:此外,您实际上正在进行整数除法:
(2/4)+(5/6) == 0 + 0 == 0
,而不是1.333...
,即使您将其分配给double
。您需要强制至少一个分子和分母为双精度:请注意,这段代码中存在初始化问题和线程安全问题,因为您使用的是一个成员变量来保存结果:您需要确保
dbSum == 0
最初,并且没有其他线程同时调用该方法。如果不使用成员变量,会更安全:(您也可以递归地编写它,尽管这在Java中并没有真正的帮助)。一个
for
循环总体上是一个更好的策略,但我想这是递归中的一个练习