题目描述:
** 斐波那契数列**
示例 :
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
类似题目: 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。
求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
来源:力扣(LeetCode)
算法实现:
解题思路
动态规划
因为每一次计算都会用到上次计算的数据,所以可以采用动态规划的思想,利用上每一次计算的数据求出下一次的结果
def fib(self, n):
"""
:type n: int
:rtype: int
"""
## 动态规划
MOD=10**9 +7
if n<2:
return n
q,r=0,1
for i in range(1,n):
q,r=r,(q+r)%MOD
return r