7、斐波那契数列
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n<=39
解题思路:
一、递归
- 时间复杂度:O(2^n)
- 空间复杂度:O(1)
public int Fibonacci(int n) {
if(n<0){
return -1;
}
if(n==0||n==1){
return n;
}
return Fibonacci(n-2)+Fibonacci(n-1);
}
二、优化递归
- 时间复杂度:O(n)
- 空间复杂度:O(n)
public int Fibonacci1(int n) {
int array[]=new int[n+1];
return f(n,array);
}
public int f(int n,int array[]){
if(n==0||n==1){
array[n]=n;
return array[n];
}
if(array[n]==0){
array[n]=f(n-2, array)+f(n-1, array);
}
return array[n];
}
public int f1(int n){
if(n<0){
return -1;
}
if(n<2){
return n;
}
int[] rs = new int[n+1];
rs[0]=0;
rs[1]=1;
for(int i=2;i<=n;i++){
rs[i]=rs[i-1]+rs[i-2];
}
return rs[n];
}
三、优化存储
- 时间复杂度:O(n)
- 空间复杂度:O(1)
// 优化存储
public int f2(int n){
if(n<0){
return -1;
}
if(n<2){
return n;
}
int one=1;
int sum=0;
for(int i=2;i<=n;i++){
one=one+sum;
sum=one-sum;
}
return one;
}