一、暴力递归
class Solution {
public int fib(int n) {
// 初始值
if(n <= 0)
return 0;
if(n == 1 || n == 2)
return 1;
// F(n)=F(n-1)+F(n-2)
return fib(n - 1) + fib(n - 2);
}
}
- 算法时间度:O(2^n),因为有太多重复计算
二、dp思想的动规
class Solution {
public int fib(int n) {
// 初始值
if(n <= 0)
return 0;
// 申请一个数组,保存子问题的解,题目要求从第0项开始
int[] array = new int[n + 1];
array[0] = 0;
array[1] = 1;
for(int i = 2; i <= n; ++i){
// F(n)=F(n-1)+F(n-2)
array[i] = array[i - 1] + array[i - 2];
}
return array[n];
}
}
- 算法时间复杂度:O(N)