Java 使用递归添加分数

Java 使用递归添加分数,java,recursion,fractions,Java,Recursion,Fractions,我需要编写一个递归方法来计算以下序列: m(i) = 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + 6/13 + .... + i/(2i + 1) 然后我需要为I=1,2,….10编写一个显示m(I)的程序 我理解递归的基本思想,到目前为止,我已经做了两个程序,一个用于阶乘,一个用于斐波那契数列。这个问题把我难住了 这就是我目前所拥有的 public static void main(String[] args) { for (int i = 1; i <= 1

我需要编写一个递归方法来计算以下序列:

m(i) = 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + 6/13 + .... + i/(2i + 1)
然后我需要为
I=1,2,….10
编写一个显示
m(I)
的程序

我理解递归的基本思想,到目前为止,我已经做了两个程序,一个用于阶乘,一个用于斐波那契数列。这个问题把我难住了

这就是我目前所拥有的

public static void main(String[] args) {
    for (int i = 1; i <= 10; i++) {
        System.out.println(m(i));
    }
}

public static double m(int i) {
    if (i == 1)
        return 1;
    else
        return ???;
}
publicstaticvoidmain(字符串[]args){

对于(inti=1;i首先,看起来基本情况是关闭的-应该是1/3(系列中的第一个数字)

对于您的else,您应该返回添加到当前步骤的下一步。给定系列,当前步骤为
i/(2i+1)


它需要递归吗?如果不需要,一个简单的for循环就可以了

double sum = 0;
for(int x = 0; x < i; x++)
{
    sum += x / (2.0 * x + 1);
}
return sum;
基本情况是1:

public static double m(int i)
{
    if(i==1)
        return 1.0/3.0;
    else
    { 
        double sum = i/(2.0 * i + 1);

        return sum + m(i-1);
    }
}

“你被困在哪里了?到目前为止你有什么?@thegrinner为你更新了它。如前所述,这个问题天生不适合递归。然而,可能是这样的情况,连续的分子遵循一个带有简单递归定义的序列。如果这是真的,那么这与其说是一个编程问题,不如说是一个数学问题,而你需要在math.stackexchange.com上可能会有更多的运气。如果不是这样,那么这对于理解递归来说是一个坏问题。你能解释一下当前的步骤是什么吗@thegrinner@thegrinner您可能应该添加
.0
几个位置以避免整数除法。@Blucere当前步骤恰好是ser中的第
i
步你有:
i/(2i+1)
。例如,
m(1)
将变成
1/(2*1+1)
,或者
1/3
m(5)=5/(2*5+1)=5/11
。另外,我忘记了乘法符号-修正了答案中的乘法符号。对我来说,这会打印出0.0十次。另外,谢谢你的解释@thegrinner@BluceRee确保你有我最初忘记的
*
(应该是
I/(2*I+1)
public static double m(int i)
{
    if(i==0)
        return 0;
    else
    { 
        double sum = i/(2.0 * i + 1);

        return sum + m(i-1);
    }
}
public static double m(int i)
{
    if(i==1)
        return 1.0/3.0;
    else
    { 
        double sum = i/(2.0 * i + 1);

        return sum + m(i-1);
    }
}