不知道如何使用分数处理这个简单的递归

时间:2012-10-12 16:04:33

标签: java recursion

我必须编写一个简单的递归方法来计算m(i) = (1/2) + (2/3) + ... + i/(i+1)。我觉得这应该非常简单,但我无法弄清楚。我知道我必须通过递减循环,但我无法得到它。到目前为止,我有以下内容,我知道这是完全错误的。

public class Recursion {
    public static void main(String[] args) {

        double n = run(10);
        System.out.print("Result: " + n);
    }

    public static double run(double nb) {
        double result = 0;

        if(nb == 2){
            return 1/2;
        }

        result += run(nb - 2) / run(nb - 1);
        return result;

    }

}

4 个答案:

答案 0 :(得分:2)

使用此递归关系:

  

m(i)= i /(i + 1)+ m(i-1)

在代码中,它可能如下所示:

public static double run(int i) {
    if (i < 1) {
        return 0;
    }
    return i / (i + 1.0) + run(i - 1);
}

请注意,参数不需要是浮点数,只需要返回值。

答案 1 :(得分:2)

试试这个:

public class Recursion{
    public static void main(String[] args) {
        double n = run(10);
        System.out.print("Result: " + n);
    }

    public static double run(double nb) {
        double result = 0;
        if(nb > 1){
            result = nb/(nb + 1) + run(nb - 1);
        } else{
            result = nb/(nb + 1);
        }
        return result;
    }
}

答案 2 :(得分:0)

尝试一点数学应该简单。

  

m(i)= 1/2 + 2/3 + .... +(i)/(i + 1)
  或m(i)= 2 / 2-1 / 2 + 3 / 3-1 / 3 + .... +(i + 1)/(i + 1) - 1 /(i + 1)
   或m(i)= 1-1 / 2 + 1 - 1/3 + ...(i次).. + 1 - (1 /(i + 1))
   或m(i)= i - (1/2 + 1/3 + ... + 1 /(i + 1))

现在为此编写算法应该很容易。

答案 3 :(得分:0)

我认为你应该替换这个

result += run(nb - 2) / run(nb - 1);

通过

result += nb - 2 / nb - 1;
return result + run(nb - 1);