我在尝试非递归地找到这个系列的总和时遇到了麻烦 到目前为止,我有:
public static double sum_nr(int n) {
int result = 0;
for (int i = 1; i<=n; i++)
{
result=result+1/(i+1);
}
return result;
}
public static void main(String[] args){
int n= 4;
System.out.println("Calculation for sum_nr(n) " + n + " is "+ sum_nr(n));
}
我总是得到0.0作为总和。
我做错了什么?
答案 0 :(得分:3)
我认为这是由于没有使用正确的类型。你正在进行整数除法而不是使用浮点类型。
public static double sum_nr(int n) {
double result = 0;
for (double i = 0; i < n; i++)
{
result=result+1.0/(i+1);
}
return result;
}
答案 1 :(得分:0)
整数除法将导致0结果。您应该使用float
/ double
而不是int
来表示变量result
。
答案 2 :(得分:0)
结果=结果+ 1 /(I + 1);总是给0,因为我是一个整数。将i值赋给float并使用
float result = 0f; //将结果声明为float,或者为(int i = 1; I&LT; = N;我++) {float val = i; 结果=结果+ 1 /(浮动+ 1); }
答案 3 :(得分:0)
与其他人一样,但他们的答案并未完成。
public static double sum_nr(int n) {
float result = 0;
for (int i = 1; i<=n; i++){
result=result+1/((float)i+1);
}
return result;
}
result
需要是float或double,但您还需要将i
转换为float或double。无需创建新变量
答案 4 :(得分:0)
您所指的系列是harmonic series。这是一个封闭的形式近似。
H(n) = ln(n) + gamma + 1/(2n) - 1/(12n^2)
其中gamma是Euler-Mascheroni常数。请参阅here。
在Java中,这里有一些代码可以正确计算并显示与n
增长的实际近似值的差异。它将逐渐变小:
constant double EULER_MASCHERONI = 0.57721566490153286060651209008240243104215933593992;
public static double approximateHarmonicSummation(int n) {
return Math.log(n) + EULER_MASCHERONI + 0.5 * n - 1.0 / (12.0 * Math.pow(n, 2));
}
public static double sum_nr(int n) {
double result = 0;
for (double i = 0; i < n; i++) {
result += 1.0 / (i + 1);
}
return result;
}
public static void main(String[] args) {
double approx = 0.0;
double actual = 0.0;
for (int n = 0; n < 1000; n++) {
approx = approximateHarmonicSummation(n);
actual = sum_nr(n);
System.out.println("Calculation for approximation of sum_nr(n) " + n + " is "+ approx);
System.out.println("Calculation of sum_nr(n) " + n + " is "+ actual);
System.out.printlin("Difference = " + (actual - approx) + "\n");
}
}
希望这有帮助。