1. 程式人生 > >劍指offer_第7題_斐波那契數列

劍指offer_第7題_斐波那契數列

題目描述

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

理解

  • 斐波那契數列
    因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

解題思路

解法1
按照斐波納契數列的定義寫遞迴程式

class Solution:
    def Fibonacci
(self, n):
if n<=0: return 0 elif n == 1 or n == 2: return 1 else: return (self.Fibonacci(n-1)+ self.Fibonacci(n-2))

但是這樣寫的話,在牛客網上會執行超時且容易棧溢位

解法2
不用遞迴怎麼寫呢,其實也很簡單,如下

class Solution:
    def Fibonacci(self, n):
        if n<=0:
            return
0 if n==1: return 1 else: a,b=0,1 for i in range(n-1): a,b=b,a+b return b

或者用列表實現

class Solution:
    def Fibonacci(self, n):
        a = [0,1]
        if n<=1:
            return a[n]
        else:
            for i in
range(2,n+1): a.append(a[i-1]+a[i-2]) return a[n]