1. 程式人生 > >(Python實現)劍指offer---斐波那契數列

(Python實現)劍指offer---斐波那契數列

(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 階臺階的不同跳法為:f(n)=f(n1)+f(n2) ,這個函式實際上就是斐波那契數列。上述程式碼改改如下:

# -*- 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