第一个k系列之和的递推1 +(1/2) - (1/3)+(1/4)......(1 / k)

时间:2011-10-14 02:34:21

标签: java

我正在尝试编写一个除了整数参数k的recurssive方法,并返回该系列的前k个项之和的双精度,如:1 +(1/2) - (1/3)+( 1/4)......(1 / K)。我写了几个递归方法,但这个方法让我很难过。我的方法设置正确吗?我的主要问题是我不会在** sumHelper方法中创建哪些变量以及如何操作它们。请帮忙!这将是非常

public static double sum (int k){
    if(k == 0) return 0;
    if(k == 1) return 1 + (1.0/2);      

    double total = 1 + sumHelper(k);
    return total; 

}

public static double sumHelper(int k) {
    if (k == 2) return 1.0/k;


    return ; ????

4 个答案:

答案 0 :(得分:2)

也许是这些方面的东西

public static double sum(int k) {
    if (k <= 0) return 0;
    if (k == 1) return 1;
    if (k % 2 == 0)
        return 1.0/k + sum(k-1);
    else
        return -1.0/k + sum(k-1);
}

答案 1 :(得分:1)

你真的不需要助手

使用k的值来查看它是+还是 -

如果它是一个+,如果是奇数那么它是 -

异常是k == 1(因为它很奇怪,我们正在添加

public static double sum(int k){
    if (k<=1) return (double) k;
    return ((k%2==0)? 1 : -1)*(1/(double)k) + sum(k-1);
}

表示k = 4:

sum(4) -> 1/4 + sum(3)
sum(3) -> -1/3 + sum(2)
sum(2) -> 1/2 + sum(1)
sum(1) = 1

==>
sum(4) = 1 + 1/2 - 1/3 + 1/4

答案 2 :(得分:0)

return (sumHelper(k-1)+Math.pow(-1.0, (double)k)*1/k);

答案 3 :(得分:0)

你过度复杂了:

public double sum(int k)
{
    if(k==1)
       return 1;
    return (k%2==0>1:-1)*1.0/k + sum(k-1);
}