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 に答える