Рекурсия для суммы первых k серий 1 (1/2)-(1/3) (1/4)……(1/ к)

#java

#java

Вопрос:

Я пытаюсь написать рекурсивный метод, который исключает целочисленный аргумент k и возвращает в виде удвоенной суммы первых k членов ряда, таких как: 1 (1/2)-(1/3) (1/4)……(1/ к). я написал несколько рекурсивных методов, но этот ставит меня в тупик. Правильно ли настроен мой метод? Моя главная проблема в том, что я не знаю, какие переменные я должен создавать в методе ** 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 ; ????
  

Комментарии:

1. К вашему сведению, вы хотели сказать, что «принимает», а не «исключает»

Ответ №1:

Возможно, что-то в этом роде

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

Ответ №2:

вам действительно не нужен помощник

используйте значение 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
  

Ответ №3:

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

Ответ №4:

Вы слишком усложняете это:

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