劍指offer_第7題_斐波那契數列
阿新 • • 發佈:2019-02-18
題目描述
- 現在要求輸入一個整數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]