#递归算法:
递推方程: f(n) = f(n-1) + f(n-2) ;
递归出口: f(0) = 0, f(1) = 1 ;
时间复杂度
O(n^2), 包含大量重复计算复杂度是n方级
空间复杂度
O(n), 递归调用栈消耗了一些空间,最大空间与递归深度有线性关系
int fib(int n) {
if (n < 1)
return n? 1: 0 ;
return (fib(n-1) + fib(n-2)) ;
}
#非递归算法
因为上边的算法需要很多重复计算,时间复杂度大,给出下边算法:
class Solution {
public int fib(int n) {
int f0=0;
int f1=1;
if(n==0) {
return f0;
}
int f2=1;
for(int i=2;i<=n;i++) {
f2=(f0+f1);
f0=f1;
f1=f2;
}
return f2;
}
}