我正在尝试编写一个除了整数参数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 ; ????
答案 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);
}