题目
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N,计算 F(N)。
示例 1:
输入:2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1.
思路
1:递归
优点-> 代码简介 缺点-> 程序运行速度变慢,容易栈溢出
int fib(int N){
if(N==0) return 0;
if(N==1) return 1;
return fib(N-1)+fib(N-2);
}
2:动态规划
既然每一个状态都能由前一个状态和前前一个状态推出来,那么我们可以搞一个数组来存取所有之前的状态。一步一步推导出来当前状态。
int fib(int N){
if(N==0) return 0;
if(N==1) return 1;
int dp[N+1];
dp[0]=0;
dp[1]=1;
for(int i=2;i<=N;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[N];
}