问题描述
我必须找到 e ,即1/0!
+ 1/1!
+ 1/2!
+ 1/3!
... + 1/n!
给定n作为参数,我很难得到正确的答案。
public double Factorial(int n) {
long fact = 1;
for (int i = 1; i <= n; ++i) {
fact *= i;
}
return fact;
}
public double euler(int n) {
double y = 0;
for (int x = 0; x <= n; x++) {
double e = 1 / Factorial(n);
y = y + e;
}
return y;
当我输入10
时,当我应该获取2.7557319223985893E-6
时,这将输出2.7182818011463845
。我跑了几次代码,但我不知道问题所在。任何帮助表示赞赏。
解决方法
评论中给出的答案解决了该问题。并且由于您没有使用算法,因此您可能对以下内容感兴趣:
阶乘方法不是必需的。由于n!
的每个后续值均为n! * (n+1)
,因此您可以按如下所示将其应用于主循环。
// initialize fact to 0!
double fact = 1;
// first Euler term 1/0!
double y = fact;
for (int x = 1; x <= n; x++) {
// next factorial
fact *= x;
// subsequent terms
y += (1 / fact);
}
System.out.println(y);
打印
2.7182818011463845
当 r 接近 0 (1 / r) 的极限。 / strong>。
double r = .000000001;
System.out.println(Math.pow(1 + r,1/r));
2.71828205201156