1. 程式人生 > 其它 >劍指offer-J27斐波那契數列 Fibonacci

劍指offer-J27斐波那契數列 Fibonacci

難度:入門

題目描述:

大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。

思路:

1.最容易想到的是遞迴,但是分析發現遞迴的時間複雜度非常高,2^n

2.找規律,用迴圈,建立中間變數來儲存前一輪的結果,在下一輪之中直接取用

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        '''if n == 0:
            return 0
        if n == 1:
            return 1
        if n >1:
            num = self.Fibonacci( n-1)+self.Fibonacci( n-2)
            return num
        return None #判斷時不是負數,因為體重要求的是整數,沒有說一定是整數
          
''' # 如果按照遞迴來寫的話,時間複雜度的增長為(2**n) 因為每個數都會被分為兩個,然後不斷分解 # 遞迴 首先 要理解斐波那契數列 # 0 1 1 2 3 5 8 13 # n=0 num =0 # n=1 num = 1 # n=2 num =1 # '''''' # 當n=k(k>1) 的時候,f(k)=f(k-1)+f(k-2) # 當n=1 ,f(1) =1 當n=0,f(0)=0 #
保留中途計算過的結果,用於之後的計算 # 通過迴圈來做 if n == 0: return 0 if n == 1: return 1 a = 1 b = 0 ret = 0 for i in range(0,n-1): ret = a + b b = a a = ret return ret
# if n > 1: #當n=2 h = 0+1 初始化 a=0 b =1