递归
优化思路:将f(n)的存到数组中,避免重复计算
public class Solution {
int[] f=new int[41];
public int Fibonacci(int n) {
if(n==1||n==2) return 1;
return f[n]=Fibonacci(n-1)+Fibonacci(n-2);
}
}
非递归
优化思路1:使用数组进行存储
public class Solution {
public int Fibonacci(int n) {
int[] dp=new int[41];
dp[1] = 1;
dp[2] = 1;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return di[n];
}
}
优化思路2:非递归从n=3开始,逐级向上,最终到达n,每次计算只使用到n-1、n-2两个值,可以简化存储空间
public class Solution {
public int Fibonacci(int n) {
if(n<=2)return 1;
int a = 1;
int b = 1;
int c=0;
for(int i=3;i<=n;i++){
c=a+b;
a=c-a;
b=c;
}
return c;
}
}