【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?【即 斐波那契数列】
斐波那契数列问题(1,1,2,3,5,8,13,21这样的数列,从第三个数开始每个数等于它前面的两个数相加)
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?【即 斐波那契数列】
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
编写程序在控制台输出斐波那契数列前20项
现在从变量、数组、递归三个角度出发解决这个puzzle:
变量,方法一:
public class Fibonacci01 {
public static void main(String[] args) {
int a=1 , b=1 , c=0;
System.out.println("斐波那契数列:" );
System.out.print( a +" " + b + " ");
for(int i=2; i<18; i++){
c = a + b;
a = b;
b = c;
System.out.print(c + " ");
if(i == 10){
System.out.println(); //换行
}
}
}
}
输出结果:
斐波那契数列:
1 12 3 5 8 13 21 34 55 89
144 233 377 610 987 1597 2584 4181 6765
数组,方法二:
public class Fibonacci02 {
public static void main(String[] args) {
int[] a = new int[20];
a[0] = 1;
a[1] = 1;
System.out.println("斐波那契数列:" );
System.out.print( a[0] +" " + a[1]);
for(int i=2; i<a.length; i++){
a[i] = a[i-1] + a[i-2];
System.out.print(a[i] + " ");
if(i == 10){
System.out.println(); //换行
}
}
}
}
输出结果:
斐波那契数列:
1 12 3 5 8 13 21 34 55 89
144 233 377 610 987 1597 2584 4181 6765
递归,方法三:
public class Fibonacci03 {
public static int fibonacci(int n){
if( n == 1 || n == 2){
return 1;
}
return (fibonacci(n-1) + fibonacci(n-2));
}
public static void main(String[] args) {
System.out.println("斐波那契数列:");
for(int i=1; i<= 20; i++){
System.out.print(fibonacci(i) + " ");
if( i == 10){
System.out.println();
}
}
}
}
输出结果:
斐波那契数列:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
斐波那契数列问题(1,1,2,3,5,8,13,21这样的数列,从第三个数开始每个数等于它前面的两个数相加)