【问题标题】:Adding fractions using recursion使用递归添加分数
【发布时间】:2013-04-09 20:33:54
【问题描述】:

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

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

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

我了解递归的基本思想,到目前为止我已经完成了 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 ???;
}

【问题讨论】:

  • 你卡在哪里了?到目前为止你有什么?
  • @thegrinner 为你更新了它。
  • 如前所述,这个问题自然不适合递归。但是,可能是连续分子遵循具有简单递归定义的序列的情况。如果这是真的,那么这与其说是一个编程问题,不如说是一个数学问题,您可能在 math.stackexchange.com 上获得更多运气。如果这不是真的,那么这对于理解递归来说是一个糟糕的问题。

标签: java recursion fractions


【解决方案1】:

首先,您的基本情况似乎已关闭 - 应该是 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);
  }
} 

【讨论】:

  • 你能解释一下当前的步骤是什么吗? @thegrinner
  • @thegrinner 您可能应该添加.0 几个位置以避免整数除法。
  • @BluceRee 当前步骤恰好是您拥有的系列中的ith 步骤:i/(2i + 1)。例如,m(1) 将变为 1 / (2 * 1 + 1)1/3m(5) = 5 / (2 * 5 + 1) = 5 / 11。另外,我忘记了乘号 - 在答案中修复它。
  • 对我来说,这会打印 0.0 十次。另外,谢谢你的解释。 @thegrinner
  • @BluceRee 确保你有我最初忘记的*(应该是i / (2 * i + 1)
【解决方案2】:

它需要递归吗?如果没有,一个简单的 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多