题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
解答如下:
环境:python 2.7
方法一:递归
每个数据都要计算两次,1变成2,2变成4,4变成8,所以时间复杂度是2的n次方。
class Solution:
def Fibonacci(self, n):
# write code here
#递归实现
# n = 0 f(0) = 0
if n == 0:
return 0
# n = 1 f(1) = 1
if n == 1:
return 1
# if n > 1 f(n) = f(n-1) + f(n-2)
if n > 1:
num = self.Fibonacci(n-1) + self.Fibonacci(n-2)
return num
return None
#时间复杂度2^n
方法二:非递归法:
找出不需要重复计算的部分:
#非递归实现
# n = 0 f(0) = 0
if n == 0:
return 0
# n = 1 f(1) = 1
if n == 1:
return 1
a = 0
b = 1
# if n > 1 f(n) = f(n-1) + f(n-2)
c = 0
for i in range(0, n-1):
c = a + b
a = b
b = c
return c
#时间复杂度n
当发现有已经存在的结果可重复使用时,就要使用已经存在的数据,这样可以大大提升效率。