有问题实现计算正弦的递归Java函数,使用泰勒系列而不使用数学库

问题描述 投票:-1回答:1

我正在尝试编写一个使用泰勒系列计算正弦的递归代码,我不允许使用Math.sin。当泰勒级数的下一个项小于0.0000001时,程序应终止。

问题是我一遍又一遍地调用函数时不知道如何保存结果。

到目前为止,这是我的代码,但在Taylor系列的下一个术语小于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);
    }
}
java recursion sine taylor-series
1个回答
0
投票

要获得结果,您只需使用初始参数调用函数sin(double x,int y,int i),并将返回的值保存为与普通函数一样的变量。

sin函数的第一次调用将在内部调用具有不同参数的其他sin函数,直到此条件为真:(P(x,y)/ F(y))<0.0000001

因此,您应该修改sin函数,而不是返回未定义的变量结果:

public static double sin(double x, int y, int i) {  
    if (i % 2 == 0) {
        if ((P(x, y) / F(y)) < 0.0000001) {
            return (P(x, y) / F(y)); 
        } else {
            return sin(x, y+2, i++) + (P(x, y) / F(y)));
        }
    } else {    
        if ((P(x, y) / F(y)) < 0.0000001) {
            return (P(x, y) / F(y));
        } else {
            return sin(x, y+2, i++) + (P(x, y) / F(y)) * (-1));
        }
    }   
}
© www.soinside.com 2019 - 2024. All rights reserved.