面试题 (斐波那契数列,复杂度为线性)

系统 1390 0

来自网易的一道看似简单的笔试题

题目:要求以线性时间复杂度实现斐波那契数列。

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 。。。。。。

 

众所周知的斐波那契实现方式为递归实现:

      int feb1(int n) {
	t1++;
	if(n == 0 || n == 1) return 1;
	return feb1(n-1) + feb1(n-2);
}
    

当n=25时, 迭代次数为242785 。

关于其复杂度的解释比较麻烦,详见 http://www.cnblogs.com/python27/archive/2011/12/09/2282486.html



至今看了公开课视频后,才有所感悟,采用动态规划后,其复杂度直接下降到线性,迭代次数为49 。


 

      int a[1000] = {0};
int feb2(int n) {
	t2++;
	if(n == 0 || n == 1) return 1;
	if(a[n] != 0) return a[n];
	else a[n] = feb2(n-1) + feb2(n-2);
	return a[n];
}
    

 

面试题 (斐波那契数列,复杂度为线性)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论