【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律,分子分母都遵循【斐波那契数列】n = (n-1) + (n-2); n>2;
import java.util.Scanner;
public class Test20 {
//斐波那契数列
public static double fibonacci(int n){
if( n == 1 || n == 2){
return 1;
}
return (fibonacci(n-1) + fibonacci(n-2));
}
public static double sum(int n){
StringBuilder sb = new StringBuilder();
double sum = 0; //总和
double a = 0;
double b = 0 ;
for(int i=3; i<n+2; i++){
a = fibonacci(i); //分子(斐波那契数列,第三项为2)
b = fibonacci(i-1); //分母(斐波那契数列,第一项和第二项均为1)
sb.append( (int)a + "/" + (int)b + " + ");
if( i%10 == 0 ){
<span style="white-space:pre"> </span>sb.append("\n");
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
sum += a/b ;
}
sb.insert(0, sum + " = ");
String s= sb.substring(0,sb.length()-2);
System.out.println(s);
return sum ;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入求前几项的和:");
int n = s.nextInt();
sum(n);
}
}
输出结果:
请输入求前几项的和:
20
31.042226813624282 = 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + 21/13 + 34/21 + 55/34 +
89/55 + 144/89 + 233/144 + 377/233 + 610/377 + 987/610 + 1597/987 + 2584/1597 + 4181/2584 + 6765/4181 +
10946/6765