什么是斐波那契数列,1,1,2,3,5,8,13...这样一个数列就是斐波那契数列,求第n项的值
以下三种解法:
递归
时间复杂度:o(2^n)
public static int fib(int N) {
if (N == 0) return 0;
if (N == 1) return 1;
return fib(N - 1) + fib(N - 2);
}
递归+记忆化
public static int fib2(int N) {
int a[]=new int [1000000];
if(Arrays.asList(a).contains(a[N]))return a[N];
if (N == 0) return 0;
if (N == 1) return 1;
a[N]=fib(N - 1) + fib(N - 2);
return a[N];
}
递推(也可以理解为动态规划)
时间复杂:o(n);
public static int fib3(int N) {
int dp[]=new int [100000000];
dp[1]=1;
dp[2]=1;
for(int i=3;i<=N;i++) {
dp[i]=dp[i-1]+dp[i-2];
}
return dp[N];
}
public static long fib4(int N) {
long a=0,b=1,c=0;
for(int i=2;i<=N;i++) {
c=a+b;
a=b;
b=c;
}
return c;
}