1. 程式人生 > >劍指offer Python版 - 斐波那契數列

劍指offer Python版 - 斐波那契數列

題目描述

大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。

n<=39


方法1:

迴圈。

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n <= 2:
            return [0, 1, 1][n]
        first, second = 1, 1
        while n > 2:
            first, second = second, first + second
            n -= 1
        return second

執行時間:25ms

佔用記憶體:5728k


方法2:

遞迴。
# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            return self.Fibonacci(n - 1) + self.Fibonacci(n - 2)
不通過 您的程式碼已儲存
執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。
case通過率為0.00%

顯然,當使用遞迴方法實現時,時間複雜度和空間複雜度都太大。由於函式呼叫自身,而函式呼叫是有時間和空間消耗的:每一次函式呼叫,都需要在記憶體棧中分配空間以儲存引數,返回地址及臨時變數,而且往棧裡壓入資料和彈出資料都需要時間。