递归算法之-斐波那契数列

递归实现:效率低,容易栈溢出,计算次数成指数型爆炸(二叉树),时间复杂度为O(n^2)

public int fun(int n){
    if(n==0) n=1;
    else if(n==1) n=1;
    else 
        return fun(n-1)+fun(n-2);
}

尾递归实现:效率高,时间复杂度为O(n)
a,b分别为n=0,n=1的值

public int fun(int a,int b,int n){
   if(n==0) return b;//递归到最后将和,也就是b返回
   return fun(b,a+b,n-1); 
}

动态规划(和尾递归本质是一样的)
思想,按照自顶向上的思想的话,要知道f(9)得先求f(8)和f(7),这样下来就是计算就形成了二叉树的形式,有很多重复的计算,如果反过来想,自底向上去计算,即知道了f(1)和f(2)自然就得到了f(3),知道了f(2)和f(3),自然就知道了f(4),也就是说我们只需保存前两个计算结果即可,这样就可以在O(n)内得到结果。

public int getTotal(int n){
    if(n==0) return 1;
    if(n==1) return 1;
    int a=1;
    int b=1;
    for(int i=2;i<=n;i++){//注意这里i从2算起
        int temp = b;
        b = a + b;
        a = temp;
    }
    return b;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 斐波那契数列之兔子繁殖问题 据说很多枯燥的算法问题都是和生活密切相关的,毕竟很多算法都是人们有实际的需求才慢慢进入...
    再见远洋阅读 1,707评论 0 4
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,594评论 0 13
  • 1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容...
    孙怀阔阅读 12,884评论 0 15
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,463评论 0 3
  • 晚饭的时候 我哥分享了他在医院看到的事 在等我妈检查报告的间隙 他听到一个医生跟病患说:你鼻子里有个很小的瘤 趁早...
    李慕梓阅读 626评论 0 1

友情链接更多精彩内容