题目描述:
写一个函数,输入 n n n ,求斐波那契 ( F i b o n a c c i ) (Fibonacci) (Fibonacci)数列的第 n n n 项(即 F ( N ) F(N) F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由
0
0
0 和
1
1
1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模
1
e
9
+
7
(
1000000007
)
1e9+7(1000000007)
1e9+7(1000000007),如计算初始结果为:
1000000008
1000000008
1000000008,请返回
1
1
1。
示例1
输入:n = 2
输出:1
示例2
输入:n = 5
输出:5
解题思路
使用递归的方法,若递归深度过大,就会导致栈溢出。为了解决该问题,我们可以使用动态规划,将每次前两数之和存起来,便于下次直接使用,这样子,我们就把一个栈溢出的问题,变为了单纯的数学加法,大大减少了内存的压力。
python3代码
class Solution:
def fib(self, n: int) -> int:
x,y=0,1
while n!=0:
y=x+y
x=y-x
n=n-1
return x%1000000007
java代码
class Solution {
public int fib(int n) {
int a=0,b=1,sum=0;
for(int i=0;i<n;i++){
sum=(a+b)%1000000007;
a=b;
b=sum;
}
return a;
}
}