劍指offer-J27斐波那契數列 Fibonacci
阿新 • • 發佈:2021-07-14
難度:入門
題目描述:
大家都知道斐波那契數列,現在要求輸入一個整數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