你們都知道斐波那契數列,如今要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。spa
n<=39code
菲波那切數列是最經典的用來作遞歸舉例的案例,可是用菲波那切數列的複雜度爲2的指數次方,時間複雜度很是高,當n很大時還會形成棧溢出blog
分析求解過程遞歸
能夠看到不少節點的值被重複計算了,所以咱們能夠採用自下而上用循環的方式保存上一次計算的值避免重複計算,由f(0)、f(1)計算出f(2),由f(1)、f(2)計算出f(3)ci
由此類推,則時間複雜度爲O(n)class
1 public int Fibonacci(int n) { 2 if(n==0 ||n==1) 3 return n; 4 else{ 5 return Fibonacci(n-1)+Fibonacci(n-2); 6 } 7 }
1 public int Fibonacci(int n) { 2 if(n==0){ 3 return 0; 4 } 5 int fibMinusOne = 1,fibMinusTwo = 0; 6 for(int i=1;i<n;i++){ 7 int tmp = fibMinusOne; 8 fibMinusOne = fibMinusOne + fibMinusTwo; 9 fibMinusTwo = tmp; 10 } 11 return fibMinusOne; 12 }