GhostLWB 2019-12-14
大家都知道斐波那契数列(1、1、2、3、5、8、13、21、34、……),现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
斐波那契数列满足递归的条件:既F(n) = F(n-1)+F(n-2)
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
#递归法
if n ==0:
return 1
elif n ==1:
return 1
else:
return self.Fibonacci(n-1) +self.Fibonacci(n-2)这种方式简单粗暴,但是允许时间太长了。
方法2
循环叠加两个数
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
#递归法
a = 0
b = 1
# 循环叠加,因为每次叠加两个,所以,只需要循环到n的一半就行,但是数据是从0开始,所以需要到n // 2 + 1
for i in range(1, n // 2 + 1):
a = a + b
b = a + b
# 叠加之后,如果n为奇数,那么返回b,如果n为偶数,那么返回a
if n % 2 == 1:
return b
else:
return a
pass方式3,类似2
class Solution:
def Fibonacci(self, n):
# write code here
a = 0
b = 1
if n <= 1:
return n
for i in range(n):
a ,b = b,b+a
return a 动态规划有时被称为递归的相反的技术。动态规划方案通常使用一个数组来建立一张表,用于存放被分解成众多子问题的解。当算法执行完毕,最终的解法将会在这个表中找到。今天我们先从我们最熟的斐波那契数列数列开始。