题目:
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
题解:
方法一:使用递归实现,但是当测试用例为43时,会超出时间限制。
public class Solution
{
public int Fib(int n)
{
if(n ==0 || n ==1)
{
return n;
}
return (Fib(n-1)+Fib(n-2))%1000000007;
}
}
方法二:使用动态规划实现,利用数组存储,遍历数组计算。
public class Solution
{
public int Fib(int n)
{
//数组长度正常情况下 n+1即可,
//设置长度为n+2,处理n=0情况下,result[1] 的问题
int[] result = new int[n+2];
result[0] = 0;
result[1] = 1;
for(int i = 2;i <= n;i++)
{
result[i] = (result[i-1]+result[i-2]) % 1000000007;
}
return result[n];
}
}