题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
解题思路
通过分析,知道斐波那契第一个是0,第二个是1,第三个是0+1=1,f(n) = f(n-1) + f(n-2)
实现,如果用递归,代码简单但是计算量大,很多结点都重复计算。
改进方法:递归代码之所以慢的原因是重复的计算太多,想办法避免重复计算,把已经得到的数列中间项保存起来。
最简单的是从下往上计算,根据f(0)和f(1)计算出f(2),根据f(1)和f(2)计算出f(3),以此类推就可以算出第n项,时间复杂度O(n)
代码
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 1
fibOne = 1
fibTwo = 1
for i in range(3,n+1):
fibN = fibOne + fibTwo
fibTwo = fibOne
fibOne = fibN
return fibN