级数通常指无穷级数,而有穷级数通常称为数列。数列/级数求和或求近似值是常见的循环编程练习。
下面将给出一些题目。
1.调和数
调和级数Harmonic numbers,H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n。求调和级数前n项的和
/**
* 调和级数Harmonic numbers,
* H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n
*/
public static double harmonic (int n) {
double sum = 0.0;
for (int i = 1; i <= n; i++) {
sum += 1.0 / i;
}
return sum;
}harmonic(10) =2.9289682539682538
harmonic(50000) =11.397003949278504
2.e的幂
ex= 1+ x/1! + x**2 / 2! + x**3 / 3!+...,求e(double x)。虽然可以求ex如e1、e0.5等,参数x我们这里不关心。我们关心的是循环结束的条件,比如计算精确到10-6。
public static double e(double x) {
double sum = 0.0,xn=1,f=1,item =0;//近似值、x的幂、n!
int itemIndex = 1;
do{
xn *= x;//
f *= itemIndex;// n!
item = xn/f;pln(item);
itemIndex++;
sum += item;
}while(item>1E-6);
return sum;
}
3.求Pi
pi/8 = 1/(1*3)+1/(5*7)+1/(9*11)+...,求pi/8的a到b项的和。为什么不是前n项的和?因为要和sum_integers求a到b项的代数和,sum_cubes求a到b项的立方数的代数和统一。
/**
* the sum of a sequence of terms in the series 1/(1*3)+1/(5*7)+1/(9*11)+...
*/
public static double item(int x){
return 1.0/(x*(x+2));
}
public static double pi(int a,int b){
double sum=0;
for(int i =a;i<=b;i+=4){
sum+=item(i);
}
return sum;
} pln("pi="+8*pi(1,5000)) 输出
pi=3.14119265360579
请设计大统一的、通用函数。