斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、一、一、二、三、五、八、1三、2一、……在數學上,斐波納契數列以以下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用。java
學習遞歸算法的時候通常都會了解這個數列,以此做爲例子來研究。算法
我學習算法這些也都是自學,因此第一次接觸遞歸併非這個例子,並且我到如今也不是很瞭解遞歸算法的過程。因此,以至我接觸到斐波那契數列的時候直接用循環的方式寫出來了,以後的學習的發現這樣的速度比遞歸實現快,是對遞歸算法速度的改進算法,頓時對本身不熟悉遞歸而感到也不是那麼次啊......數組
下面給出遞歸的算法:學習
package org.zsl.algorithm.fibonacci; public class Fibonacci1 { //斐波那契數列中的遞歸 public static void main(String[] args) { System.out.println(fibonacci(40)); } //遞歸調用 public static int fibonacci(int n){ //此算法在N=40時出現明顯卡頓 if(n==0) return 0; if(n==1) return 1; return fibonacci(n-1)+fibonacci(n-2); } }
package org.zsl.algorithm.fibonacci; public class Fibonacci2 { public static void main(String[] args) { System.out.println(fibonacci2(46)); } public static int fibonacci2(int N){ //此算法速度較快,N=46時也不卡頓,N=47時超過了int範圍 int[] arr = new int[N+1]; //數組從0開始,若想要一個數組有a[9],在聲明時必須是int[] a = new int[10];這樣纔會有a[9] arr[0] = 0 ; arr[1] = 1 ; if( N==0 ) return 0; if(N==1) return 1; if(N>1){ for(int i = 2;i<=N;i++) arr[i] = arr[i-1]+ arr[i-2]; } return arr[N]; } }