大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
思路有三种: 基本思路 F(n) = F(n-1) + F(n-2)
1. 递归
2. 动态规划
3. 类动态规划 但只保存前后两个值
代码如下:
class Solution {
public:
//方法一:递归
int fib(int n){
if(0 == n || 1 == n)
{
return n;
}
return fib(n-1) + fib(n-2);
}
//方法二:动态规划
int fib1(int n){
int a[40] = {0};
a[0] = 0;
a[1] = 1;
for(int i = 2; i <= n; i++){
a[i] = a[i-1] + a[i-2];
}
return a[n];
}
//方法三:类似动态规划 但只保留当前值cur 和前一个值pre
int fib2(int n){
if(0 == n || 1 == n)
{
return n;
}
int pre = 0;
int cur = 1;
for(int i = 2; i <=n; i++){
cur = pre + cur;
pre = cur - pre;
}
return cur;
}
int Fibonacci(int n) {
//return fib(n);
//return fib1(n);
return fib2(n);
}
};