分配:编写计算以下系列的方法: m(i)= 1 - (1/2)+(1/3) - (1/4)+(1/5) - ...... +(( - 1)^(i + 1))/ i < / p>
编写一个显示以下代码的测试程序:
i: m(i):
5 0,78333
10 0,64563
.. ..
45 0,70413
50 0,68324
我已经尝试了几个小时了,我想不出怎么解决这个问题。也许我只是愚蠢哈哈:)
到目前为止,这是我的代码:
package computingaseries;
public class ComputingASeries {
public static void main(String[] args) {
System.out.println("i\t\tm(i)");
for (int i = 5; i <= 50; i += 5) {
System.out.println(i + "\t\t" + m(i));
}
}
更新:
public static double m(int n) {
double tal = 0;
double x = 0;
for (int i = 1; i <= n; i += 1) {
if (i == 1) {
x = 1 - ((Math.pow(-1, (i + 1))) / i);
} else {
x = ((Math.pow(-1, (i + 1))) / i);
}
}
tal += x;
return tal;
}
}
我的错误输出:
i m(i)
5 0.2
10 -0.1
15 0.06666666666666667
20 -0.05
25 0.04
30 -0.03333333333333333
35 0.02857142857142857
40 -0.025
45 0.022222222222222223
50 -0.02
答案 0 :(得分:2)
定义x时必须消除“1-”,即x =(( - 1)^(i + 1))/ i
修改强>
x == 1没有特殊情况,x总是定义为x = Math.pow(-1,i + 1)/ i。注意((-1)^(1 + 1))/ 1 =(( - 1)^ 2)/ 1 = 1/1 = 1。 tal + = x也进入for循环。
答案 1 :(得分:0)
public class SpecialSeries {
public static double m(int n){
double sum = 0;
for (int i = 1; i <= n; i++) {
sum += Math.pow(-1, (i+1))/(double)i;
}
System.out.println(n+"\t"+sum);
return sum;
}
public static void main(String[] args) {
System.out.println("i:\tm(i)");
for (int i = 5; i < 50; i+=5) {
m(i);
}
}
}
您可以在ideone
运行此处