每天一道劍指offer-牛客網斐波那契數列

  • 2019 年 10 月 4 日
  • 筆記

題目詳述

大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39

題目詳解

思路

  • f(n) = f(n-1) + f(n-2),第一眼看就是遞歸啊,簡直完美的遞歸環境,遞歸肯定很爽,這樣想着關鍵代碼兩三行就搞定了,注意這題的n是從0開始的: if(n<=1) return n; else return Fibonacci(n-1)+Fibonacci(n-2); 然而並沒有什麼用,測試用例里肯定準備着一個超大的n來讓Stack Overflow,遞歸本質是利用棧,棧深度太深就會溢出;
  • 非遞歸的方法,就是劍指offer思路,每次使用兩個變量a,b來計算下一個數的值sum,然後a,b,sum分別是斐波那契數列中的三個數,那麼就令a=b,b=sum,這樣a和b就往下移動了一個位置,再計算sum就是滴4個數了,重複這個過程即可。

代碼

public class Solution {      public int Fibonacci(int n) {          int a = ;          int b = ;          if(n == )              return ;          if(n == )              return ;          int i = ;          int sum=;          while(i <= n)          {              sum = a + b;              a = b;              b = sum;              i++;          }          return sum;      }  }  

代碼講解

  • 3-8行就是初始值n的個數為0或者1,直接返回當前結果
  • 11-17行就是計算斐波那契數列的下一個數,其中i用來統計計算出了幾個數,循環終止條件。