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
动态规划有时被称为递归的相反的技术。动态规划方案通常使用一个数组来建立一张表,用于存放被分解成众多子问题的解。当算法执行完毕,最终的解法将会在这个表中找到。今天我们先从我们最熟的斐波那契数列数列开始。