使用递归添加分数

时间:2013-04-09 20:33:55

标签: java recursion fractions

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

m(i) = 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + 6/13 + .... + i/(2i + 1)

然后我需要编写一个为m(i)显示i = 1,2,....10的程序。

我理解递归的基本思想到目前为止我已经完成了2个程序,一个用于阶乘,一个用于斐波纳契数列。这个问题让我很难过。

这是我到目前为止所拥有的。

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 ???;
}

2 个答案:

答案 0 :(得分:2)

首先,它看起来像你的基本情况 - 应该是1/3(系列中的第一个数字)。

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

public static double m(int i) {
  if (i == 1) {
    // Base case is 1 - return the first number in the series
    return 1/3;
  } else {
    // Get the current step (ie the current iteration of m(i))
    double curStep = i / (2.0 * i + 1.0);

    // Return the current step plus the next step down
    return curStep + m(i - 1);
  }
} 

答案 1 :(得分:0)

是否需要递归?如果没有,一个简单的for循环就可以解决问题。

double sum = 0;
for(int x = 0; x < i; x++)
{
    sum += x / (2.0 * x + 1);
}
return sum;

如果必须递归,则需要从正确识别基本情况开始。在这种情况下,您的基本情况可以是0或1.示例:

基本情况为0:

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

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

基本案例是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);
    }
}