关于时间复杂度和空间复杂度的一道简单面试题(fibonacci数列)
好象是哪里的习题忘记了。
计算fibonacci数列的两种方法:
递归算法为:
long Fib(int n)
{
if(n==1||n==2) //终止递归条件
return 1;
else
return Fib(n-1)+Fib(n-2);
}
/***********************
空间复杂度:因为存在递归栈,所以空间复杂度为O(n)
时间复杂度:因为每次递归有2次调用,时间复杂度也为O(n)
*********************/
非递归算法为
long Fib1(int n)
{
int a,b,c;//C代表当前项,a和b分别代表当前项前面的第2项和第1项
a=b=1; //给a和b赋初值1
if(n==1||n==2)
return 1;
else
for(int i=3;i<=n;i++){
c=a+b; //求出当前项
a=b;//把前面第1项赋给前面第2项
b=c;//把当前项赋给前面第1项
}
return c;//返回所求的第n项
}
/**************
空间复杂度:程序运行空间与n无关所以空间复杂度为O(1)
时间复杂度:因为有n-3次循环,时间复杂度也为O(n)
**************/
注释为我的做答,有没有把握?