写一个函数,输入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:
输入:n= 2输出:1
示例2:
输入:n= 5输出:5
提示:
e<= n<= 1ae
#include <iostream>
using namespace std;
int fib(int n)
{
//处理边界情况
if (n == 0) return -1;
//dp表示Dynamic programming, 即动态规划
//根据已知条件,初始化dp数组,n等于其实就是求dp几的值,即dp[n]的值,
//所以dp数组需要有n+1个元素,n + 1 个元素是从dp[0]____到_____dp[n]
//申请空间
int *dp = new int[n + 1]();//5个初始化为0的int
dp[0] = 0;
dp[1] = 1;
//动态规划核心,填充dp数组
for (int i = 2; i < n + 1; ++i) dp[i] = dp[i - 1] + dp[i - 2];
int result = dp[n];
//释放空间
delete dp;
//答案要求取模1e9 + 7
return result %= 1000000007;
}
int main()
{
int n = 6;
cout << fib(n) << endl;
}
运行结果: