Я пытаюсь написать рекурсивный код, который вычисляет синус с использованием ряда Тейлора, и мне не разрешено использовать Math.sin
.
Программа должна завершиться, когда следующий член ряда Тейлора будет меньше 0,0000001.
Проблема в том, что я не знаю, как сохранить результат при повторном вызове функции.
Пока это мой код, но, похоже, он даже не вспоминает себя, пока следующий член ряда Тейлора не станет меньше 0,0000001:
public static double sin(double x, int y, int i) {
if (i % 2 == 0) {
if ((P(x, y) / F(y)) < 0.0000001) {
return result;
} else {
return sin(x, y+2, i++) + (P(x, y) / F(y)));
}
} else {
if ((P(x, y) / F(y)) < 0.0000001) {
return result;
} else {
return sin(x, y+2, i++) + (P(x, y) / F(y)) * (-1));
}
}
}
public static double F( int n) {
if (n==0 || n==1) {
return 1;
} else {
return n* F(n - 1);
}
}
public static double P(double x, int y) {
if (y == 0) {
return 1;
}
if (y == 1) {
return x;
} else {
return x * P(x, y - 1);
}
}