最近在面試的時候被問到了斐波那契數列,而且有不同的實現方式,就在這里記錄一下。
定義
斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368。
這個數列從第3項開始,每一項都等於前兩項之和。
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);
}
}