計算第n個斐波那契數
阿新 • • 發佈:2018-12-19
斐波那契數列
n>1,F(n)=F(n-1)+F(n-2); F(0)=0; F(1)=1; 求第n個斐波那契數
-
遞迴法
利用已知的斐波那契數的遞推公式即可
public class Fibonacci { public static int getFib(int n){ if(n==0) return 0; else if(n==1) return 1; else return getFib(n-1)+getFib(n-2); } public static void main(String[]agrs){ int n=10; System.out.println(getFib( n)); } }
-
動態規劃
遞迴法求解過程中,可知存在重複求解相同的函式值的情況,導致效率低下。 故利用一個數組儲存函式值,利用空間換取時間
public class Fibonacci1 { public static int getFib(int n ){ int len=n+1; int f[]=new int[len]; f[0] = 0; f[1] = 1; for (int i = 2; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } return f[n]; } public static void main(String[]agrs){ int n=10; System.out.println(getFib( n)); } }
又由於只是需要獲取第n個斐波那契數,而計算F(n)只需要F(n-1)和F(n-2)的值,可利用last以及nextToLast來儲存F(n-1)和F(n-2)的值,並不需要整個陣列來儲存所有的斐波那契數 getFib(int n )程式碼可更改為:
public static int getFib(int n){ if(n<=1){ return 1; } int last=1; int nextToLast=1; int answer=1; for(int i=2;i<=n;i++){ answer=last+nextToLast; nextToLast=last; last=answer; } return answer; }
-
矩陣