import java.util.Scanner;
public class Test07 {
static int He(int n) {
int sum=0;
int x=0,y=0,a;//x为奇数和,y为偶数和
if(n%2==1) {//1/1+1/3+1/5+..1/n+(-1)*(1/2+1/4+1/6+..1/n-1)
for(a=1;a<=n;a+=2) {//a为分母
int z = 1/a;
x += z;
}
for(a=2;a<=n-1;a+=2) {
int c = 1/a;
y = (-1)*(y+c);
}
sum=x+y;
}
else if(n%2==0) {//1/1+1/3+1/5+..1/n-1+-1*(1/2+1/4+1/6+..1/n)
for(a=1;a<=n-1;a+=2) {//a为分母
int z = 1/a;
x += z;
}
for(a=2;a<=n;a+=2) {
int c = 1/a;
y = (-1)*(y+c);
}
sum=x+y;
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
System.out.println("输入:");
int x=sc.nextInt();
System.out.println(He(x));
}
}
我的思路:
1,递归:从N直到1。
2,若当前为偶数,则减。奇数加。
实现中。。。实现完成!
拆成1+1/3+1/5+1/7 和-1/2-1/4-1/6,总结成两个公式,然后带入公式计算,效率比递归高
import java.util.Scanner;
public class Test07 {
static double He(int n) {
double sum=0;
double x=0,y=0;//x为奇数和,y为偶数和
double a;
if(n%2==1) {//1/1+1/3+1/5+..1/n+(-1)*(1/2+1/4+1/6+..1/n-1)
for(a=1;a<=n;a+=2) {//a为分母
double z = 1/a;
x += z;
}
for(a=2;a<=n-1;a+=2) {
double c = 1/a;
y = (-1)*(y+c);
}
sum=x+y;
}
else if(n%2==0) {//1/1+1/3+1/5+..1/n-1+-1*(1/2+1/4+1/6+..1/n)
for(a=1;a<=n-1;a+=2) {//a为分母
double z = 1/a;
x += z;
}
for(a=2;a<=n;a+=2) {
double c = 1/a;
y = (-1)*(y+c);
}
sum=x+y;
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
System.out.println("输入:");
int x=sc.nextInt();
System.out.println(He(x));
}
}