关于时间复杂度和空间复杂度的一道简单面试题(fibonacci数列)

FourthParty 2004-04-16 06:17:38
好象是哪里的习题忘记了。

计算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)
**************/

注释为我的做答,有没有把握?
...全文
973 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
junnyfeng 2004-04-16
  • 打赏
  • 举报
回复
错了,呵呵
FourthParty 2004-04-16
  • 打赏
  • 举报
回复
应该是O(2^n)!谢谢ranxiaoxiao(小小)
ranxiaoxiao 2004-04-16
  • 打赏
  • 举报
回复
递归算法的时间复杂度为O(2^n),是2的n次方
ranxiaoxiao 2004-04-16
  • 打赏
  • 举报
回复
裴波那契(Fibonacci)数列的定义为:它的第1项和第2项均为1,以后各项为其前两项之和。若裴波那契数列中的第n项用Fib(n)表示,则计算公式为:

ì 1 (n=1或2)

Fib(n)=í

î Fib(n-1)+Fib(n-2) (n>=2)

试编写出计算Fib(n)的递归算法和非递归算法,并分析它们的时间复杂度和空间复杂度。

递归算法为:

long Fib(int n)

{

if (n= =1 ‖n= =2) //终止递归条件

return 1;

else

return Fib(n-1)+Fib(n-2);

}

非递归算法为:

long Fib(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项

}

递归算法的时间复杂度为O(2n),空间复杂度为O(n),非递归算法的时间复杂度为O(n),空间复杂度为O(1)。
zhouqingyuan 2004-04-16
  • 打赏
  • 举报
回复
非递归算法是对的,递归算法好象不对。时间复杂度好象很大的,。

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧