Java 用递归和泰勒级数计算e^x
所以我需要使用泰勒级数的分解形式递归计算e^x: 方程:e^x=1+x+(x^2)/2!+…+((x^n)/n!)) 分解形式:e^x=1+x(1+x/2*(1+x/3*(…(1+x/n))) 在下面的函数定义中,“x”是幂,“n”是估计e^x的项的总数。我希望有人能给我指出正确的方向。我尝试了许多不同的方法,包括使用因子方程最里面项的基本情况,但没有效果Java 用递归和泰勒级数计算e^x,java,recursion,taylor-series,Java,Recursion,Taylor Series,所以我需要使用泰勒级数的分解形式递归计算e^x: 方程:e^x=1+x+(x^2)/2!+…+((x^n)/n!)) 分解形式:e^x=1+x(1+x/2*(1+x/3*(…(1+x/n))) 在下面的函数定义中,“x”是幂,“n”是估计e^x的项的总数。我希望有人能给我指出正确的方向。我尝试了许多不同的方法,包括使用因子方程最里面项的基本情况,但没有效果 static double eThree(double x, long n) { //this is what i tried
static double eThree(double x, long n) {
//this is what i tried
if(n==0){
return 1 +x/n;
}else{
double a= (1+(x/n)) * (eThree(x,n-1));
System.out.println(a);
return a;
}
}
我已经意识到,正如我所尝试的那样,“n”应该增加而不是减少,但是,对函数的原始调用具有变量“n”中的总迭代次数,并且无法跟踪所有递归调用中的总迭代次数
(1+(x/n))中每个项的除数的值,其中n是除数,每次应增加一个,并且在最终迭代中等于总迭代次数。由于该方法是静态的,您实际上可以在第一次调用时将其存储在静态变量中。您需要抛出一个if语句来检查它是否也是第一次迭代。我稍后会添加代码,但现在没有时间 或者可以跟踪变量中的迭代次数。委托给另一个方法,即“实”递归方法,并传递不同的参数 各种不同的可能解决方案 你可以把它变成一个循环,但这可能不会给你的主管留下深刻印象。就像这里通常的情况一样,请展示你的尝试。