求解斐波那契数列的时间复杂度,分别用递归和非递归方法

 我来答
匿名用户
2017-10-11
展开全部
Fibonacci数列
无穷数列1,1,2,3,5,8,13,21,34,55,···,称为Fibonacci数列。它可以递归的定义为
1 n=0
F(n)= 1 n=1
F(n-1)+F(n-2) n>1
第n个Fibonacci数可递归地计算如下:
int Fibonacci ( intn)
{
If(n<=1)return 1;
ReturnFibonacci(n-1)+Fibonacci(n-2);
}
1+T(n-1)+T(n-2) n>1
Tn=
0 n<=1

时间复杂度为指数时间O(kn)

非递归计算如下:
Int Fibonacci(int n)
{
If(n<2)return 1;
else{
int a=b=1;
for(int i=0;i<n+2;i++)
{
b=a+b;
a=b-a;
return a+b;
}
}
}
时间复杂度为O(n).
天and启
2019-08-07
知道答主
回答量:2
采纳率:0%
帮助的人:1509
展开全部

转一个牛人的博客,链接:https://www.jianshu.com/p/91b47e5f333b;
讲的很清楚,递归可以近似为二叉树,非递归是for循环,这里防止博客过期,就crtl+c+v了= =;

function fibonacci(n) {     
    if (n <= 1) {          
        return n;     
    }     
    return fibonacci(n-1) + fibonacci(n-2); 
}
针对递归方法的教学,斐波那数列可能是最常用来拿来举例的了;
但是,实际计算时绝不推荐使用递归方法,很容易stack overflow;
可以在浏览器中计算个fibonacci(100)试试。而且其时间复杂度为指数级,可以近似认为是2^n, 当然准确点可能是1.6^n;

其时间复杂度的计算: 递推关系式为f(n)=f(n-1)+f(n-2);
显然是一个2阶常系数查分方程,其特征方程为x^2-x-1=0;
得其解x, 时间复杂度为O(1.618^n);

或者另一种思路: 该方法的递归求解过程其实就是其二叉树展开的过程,时间复杂度就是计算该二叉树的节点个数: 树高n层, 但不是满二叉树,忽略常数,是O(2^n)

将递归展开,以循环方式计算

function fibonacci(n) {
    if (n <= 1) {
            return n;
   }
       let one = 0;
       let two = 1; 
       let res;
       for (let i = 2; i <= n; i++){
           res = one + two;
           one = two;
           two = res;
   }    
   return res;
}

事件复杂度为O(n)

作者:RichardBillion
链接:https://www.jianshu.com/p/91b47e5f333b
来源:简书

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DoramiHe
推荐于2017-07-26 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25335 获赞数:59532
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
这是递推算法又不是排序算法,就一个公式有什么时间复杂度,扯淡了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空若聚ae3
2015-05-03 · TA获得超过1273个赞
知道小有建树答主
回答量:3131
采纳率:12%
帮助的人:686万
展开全部
这是递推算法又不是排序算法,就一个公式有什么时间复杂度,扯淡了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式