0

我必须写一个简单的递归方法来计算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

4 回答 4

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

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

于 2012-10-12T16:05:45.923 回答
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;
    }
}
于 2012-10-12T16:09:37.653 回答
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) )

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

于 2012-10-12T16:10:49.253 回答
0

我认为你应该更换这个

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

经过

result += nb - 2 / nb - 1;
return result + run(nb - 1);
于 2012-10-12T16:11:17.410 回答