題目描述
大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0,n<=39)。
題解
首先是斐波那契數列,除了第一項和第二項,所有的數列的值都是前一項和前一項的前一項的加和,轉換成函數也就是f(n) = f(n-1) + f(n-2):
第0項:0
第1項:1
第2項:1
第3項:2
…
…
第n項:f(n) = f(n-1) + f(n-2)
看到這裏首先想到的就是遞歸算法:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n == 0:
return 0
elif n == 1:
return 1
else:
sum = self.Fibonacci(n - 1) + self.Fibonacci(n - 2)
return sum
但是提交代碼後發現超時了,下面是非遞歸寫法,循環過程中,將 (n-1)和(n-2)的值加到 sum 中,並刷新 (n-1)和(n-2)的值:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n == 0:
return 0
elif n == 1:
return 1
else:
sum = 0
n0 = 0
n1 = 1
for i in range(2,n+1):
sum = n0 + n1
n0 = n1
n1 = sum
return sum