一、Fibonacci递归
Time:O(n²)超时
class Solution {
public:
int Fibonacci(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
else return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
二、动态规划
Time:O(n)0ms
class Solution {
public:
int climbStairs(int n) {
//开辟一个n+1容量的数组 将每次递归的值记忆,保存于数组中
int * stairs=new int[n+1];
//将数组中全部元素初始化为零
memset(stairs,0,sizeof(stairs));
stairs[0]=1;
stairs[1]=1;
//每次都正序查找
for(int i=2;i<=n;i++){
stairs[i]=stairs[i-1]+stairs[i-2];
}
return stairs[n];
}
};
三、记忆递归
Time:0(n)0ms
class Soultion{
public:
long long a[10000];
long long febonacci(int n) {
if (n == 0 || n == 1)return 1;
if (a[n])return a[n];
a[n] = febonacci(n - 1) + febonacci(n - 2);
return a[n];
}
};