斐波拉契數列 java實現
阿新 • • 發佈:2019-02-11
指的是這樣一個數列:
1 1 2 3 5 8 13 21 34 ...
F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
也稱黃金分割數列,兔子數列
通項公式
(如上,又稱為“比內公式”,是用無理數表示有理數的一個範例。)
注:此時
這樣一個完全是自然數的數列,通項公式卻是用無理數來表達的。而且當n趨向於無窮大時,前一項與後一項的比值越來越逼近黃金分割0.618。
1÷1=1,1÷2=0.5,2÷3=0.666...,3÷5=0.6,5÷8=0.625…………,55÷89=0.617977……………144÷233=0.618025…46368÷75025=0.6180339886…...
越到後面,這些比值越接近黃金比.
題目:寫一個函式,輸入n,求斐波那契數列的第n項為多少?
public class Test { public static void main(String[] args) { System.out.println("第4項斐波那契數列的值為:"+Fibonacci(4)); } /* * 採用遞迴實現斐波那契數列生成函式,效率低 */ public static int generateFibonacci(int n){ if(n==0) return 0; if(n==1) return 1; return generateFibonacci(n-1)+generateFibonacci(n-2); } /* * 採用迴圈實現斐波那契數列 * 儲存數列中間項,求得結果 */ public static int fibonacci(int n){ int[] result={0,1}; if(n<2) return result[n]; int fibNMinusOne=1; int fibNMinusTwo=0; int fibN=0; for(int i=2;i<=n;i++){ fibN=fibNMinusOne+fibNMinusTwo; fibNMinusTwo=fibNMinusOne; fibNMinusOne=fibN; } return fibN; } }
Java實現
遞推方式
public static void testFibonacci1(int n) { int a = 1, b=1, c = 0; for (int i = 1; i <= n; i++) { if (i == 1) { System.out.println("第" + i + "等於" + a); }else if (i == 2) { System.out.println("第" + i + "等於" + b); }else { c = a+b; a = b; b = c; System.out.println("第" + i + "等於" + c); } } }
遞推方式-陣列方式
public static void testFibonacci2(int n) {
int[] arrayList = new int[n];
arrayList[0] = arrayList[1] =1;
for (int i = 0; i < arrayList.length; i++) {
if (i == 0) {
System.out.println("第" + (i+1) + "等於" + arrayList[0]);
}else if (i == 1) {
System.out.println("第" + (i+1) + "等於" + arrayList[1]);
}else {
arrayList[i] = arrayList[i-1] +arrayList[i-2];
System.out.println("第" + (i+1) + "等於" + arrayList[i]);
}
}
}
遞迴方式
public static int testFibonacci3(int n) {
if (n == 1 || n == 2) {
return 1;
}else {
return test3(n-1) + test3(n-2);
}
}