有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

给定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) 个答案

  1. # 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循环总体上是一个更好的策略,但我想这是递归中的一个练习