如何编写一个递归静态方法,使用(n + 1)项MacLaurin系列来计算e ^ x,称为e(x,n),使用以下递归公式:
e(x,0)= 1
e(x,n)= e(x,n-1) + x^n/n!, if n>0
此外,我的方法签名需要使用以下内容:
public static double eTwo(double x, long n)
被困了一段时间,有什么想法吗?
答案 0 :(得分:2)
这是我想到的最简单的解决方案,你试过吗?
public static double eTwo(double x, long n){
if(n==0)
return 1;
else
return eTwo(x,n-1) + Math.pow(x, n)/factorial(n);
}
public double factorial (n){
if(n==0)
return 1;
else
return n*factorial(n-1);
}
答案 1 :(得分:0)
一个可能更高效的版本是使用循环而不是递归,因为只需要分配一个堆栈帧:
static double eTwo(double x, long n) {
double result = 1;
for (long i = 1; i < n; i++)
result += Math.pow(x, (double) i) / (double) factorial(i);
return result;
}
static long factorial(long n) {
long result = 1;
for (long i = 1; i <= n; i++)
result *= i;
return result;
}