(Python實現)劍指offer---斐波那契數列
阿新 • • 發佈:2019-02-05
(Python實現)劍指offer—斐波那契數列
題目描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39
這個題目也不難,第一反應應該是使用遞迴來編寫程式碼,我的第一反應也是,但是看過書後發現,如果使用遞迴的話,當n
很大時,遞迴計算的時間複雜度時以n
的指數方式增長的。複雜度過高。
如果使用迴圈的話,其時間複雜度恆為O(n)
。
迴圈程式碼如下:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
if n == 0 :
return 0
if n == 1:
return 1
Fi_one = 1
Fi_two = 1
for i in range(2, n):
Fi_one, Fi_two = Fi_two, Fi_one+Fi_two
return Fi_two
遞迴程式碼如下:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
if n == 0:
return 0
if n == 1:
return 1
return self.Fibonacci(n-1) + self.Fibonacci(n-2)
使用遞迴在牛客上跑測試用例就會提示超時。
該題還可以擴充套件為青蛙跳臺階問題:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
當n>2
時,n
階臺階的不同跳法為: ,這個函式實際上就是斐波那契數列。上述程式碼改改如下:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# -*- coding:utf-8 -*-
if number == 0:
return 0
if number == 1:
return 1
Fi_one = 1
Fi_two = 2
for i in range(2, number):
Fi_one, Fi_two = Fi_two, Fi_one+Fi_two
return Fi_two