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