用java的for循环计算1+1/2!+1/3!+1/4!+···的前20项和

如题所述

package s1;//包名可以不要//
public class s1{
public static void main(String[]args) {
double a,b,c,sum=0;//因为有小数所以是double类型//
while(true){
for(a=2;a<=20;a++) {
c=(1/a);//计算每一次循环的结果//
sum=sum+c;//累计每一次的//
}
sum=sum+1;//加上1//
System.out.println(+sum);//输出结果//
break;//结束while循环//

}
}

循环结果为:3.5977396571436824


温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-21

F1 = 1

F2 = F1 / 2

F3 = F2 / 3

Fn = F(n-1) / n

如果每一项都计算一遍阶乘,那么程序的复杂度会很大,可以通过备忘录的形式,比如将F(n-1)的计算结果保存下来,计算Fn的时候,就不用再计算(n-1)的阶乘了。

代码如下:

public class Test3 {
Map<Integer, Double> map = new HashMap<Integer, Double>();

public static void main(String[] args) {
Test3 test = new Test3();
double sum = 0;
int index = 20;
for (int i = 1; i <= index; i++) {
sum += test.cal(i);
}
System.out.println("前" + index + "项之和:" + sum);
}

public double cal(int num) {
if (num == 1) {
map.put(1, (double) 1);
return 1;
}
Double value = map.get(num - 1);
double result = value / num;
map.put(num, result);
return result;
}
}

运行结果:

前20项之和:1.7182818284590455

第2个回答  2013-11-10
int sum =0,temp=1 for(int i=1;i<=20;i++) { temp=i*temp sum+=1/(temp); }System.out.println(sum);
第3个回答  2017-07-08
double result = 0;
for(int i=1;i<20;i++){
int temp = i;
for(int j=1;j<i;j++){
temp *= j;
}
result+=1*1.0/temp;
}

第4个回答  2018-04-12
public class example43for {
public static void main(String args[]){
double result = 0;
for(int i=1;i<20;i++){
int temp = i;
for(int j=1;j<i;j++){
temp *= j;
}
result+=1*1.0/temp;
}
System.out.println("result="+result);
}
}
result=1.7182818351251556
相似回答