您的位置:首页 > 编程语言 > Java开发

五十道编程小题目 --- 20 java

2016-08-25 21:15 423 查看
【程序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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: