递归:
//递归
int Fib1(int a){
if(a<3){
return 1;
}else{
return Fib1(a-1)+Fib1(a-2);
}
}
此题递归的实质:二叉树
由于没有中间值存储变量,致使每次计算都要重复进行。
1)时间复杂度:O(2^N).
2)空间复杂度:低.
数组:
//数组
int Fib2(int a){
int i;
int arr[a];
arr[0]=1;
arr[1]=1;
for(i=2;i<a;i++){
arr[i]=arr[i-1]+arr[i-2];
}
return arr[i];
}
1)时间复杂度:低.
2)空间复杂度:高.(开辟了数组)
变量存储(建议使用):
//变量存储
int Fib3(int a){
if(a<3){
return 1;
}
int A=1;
int B=1;
int C;
for(int i=2;i<a;i++){
C=A+B;
A=B;
B=C;
}
return C;
}
利用变量存储的方式,使得时间复杂度和空间复杂度最低,而且可读性高。