题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
代码(1):
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n == 1:
return 1
elif n == 0:
return 0
else:
return self.Fibonacci(n-1)+self.Fibonacci(n-2)解题思路:
解题思路:递归,但是效率很慢,面试时候也不会有好消息。
递归可以实现但是效率慢,是因为他不断重复计算了很多东西。
举个栗子:
F(5)
F(4) + F(3)
F(3) + F(2) F(2) + F(1)
F(2) +F(1) F(1) +F(0) F(1) + F(0) 1
1+0 1 1 0 1 0
我们可以发现:
值 | 计算次数 |
F(4) | 1 |
F(3) | 2 |
F(2) | 3 |
F(1) | 4 |
F(0) | 2 |
代码(2):
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
F_list = [0,1]
for i in range(2,n+1):
F_list.append(F_list[i-1]+F_list[i-2])
return F_list[n]
解题思路:如果 我们 把多余的计算量去掉,就会提升很多。把计算结果存起来,但是空间复杂度就变了。
代码三(偷鸡):
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
a = 0
b = 1
for i in range(2,n+1):
a , b = b , a+b
if n == 0:
return 0
else:
return b