算法设计与分析(Java实现)—— 动态规划(入门)斐波那契数列_java.用动态规划法求解斐波那契问题-程序员宅基地

技术标签: 算法  # 数构+算法+设计分析  java  leetcode  动态规划  数据结构  

斐波那契数列

  • 递归
  • 记忆化递归
  • 动态规划
public class dp {
    
    //# 递归的的斐波那契数列解决方法 时间复杂度O(2^n)
    public  long fibonacci(int n) throws Exception{
    
        //特殊情况,分开讨论
        if (n == 1 || n == 2) {
     return 1; }
        if (n > 2) {
     return fibonacci(n - 1) + fibonacci(n - 2); }//递归调用
        return -1;              //如果输入错误的n,一律返回-1
    }

//    # 记忆化搜索
    public static long fibonacci1(int n) {
    
        int[] memo = new int[n + 1]; // 自定义数组的默认值都为0
        if (n == 0) {
     return 0; }
        if (n == 1) {
     return 1; }
        // 当数组的值为0时,才进行迭代
        if (memo[n] == 0) {
     memo[n] = (int) (fibonacci1(n - 1) + fibonacci1(n - 2)); }
        return memo[n];
    }
//    # 动态规划 先解决小数据量的 再层层递推的解决大数据量级的问题 时间复杂度O(n)
    public static long fibonacci2(int n){
    
        long f0 = 1, f1 = 1;
        long f2 = 0;
        for(long i = 3; i <= n; i++){
    
            f2 = f0 + f1;
            f0 = f1;
            f1 = f2;
        }
        return f2;
    }
    
    /**
     * 阶乘
     * @param
     * @return
     */
    /*public int factorial(int n) throws Exception {
        if (n < 0) {
            throw new Exception("负数没有阶乘");
        } else if (n <= 1) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }*/

    public static void main(String[] args) {
    
//        System.out.println(fibonacci(100));
//        System.out.println(fibonacci1(100));
        System.out.println(fibonacci2(30));


    }

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46344594/article/details/116519798

智能推荐

Mac系统下Sublime Text内调试JavaScript代码_mac sublime 调试typescript项目-程序员宅基地

文章浏览阅读2.7k次。问题:我想单独调试一段JavaScript代码而不是嵌入到网页端执行 工具: Sublime Text解决问题: 一、安装node.js 当然你也可以使用jsc环境来运行js,这里我们使用node.js来运行, 安装成功查询:在终端中输入 node -v会输出node版本号二、配置编译文件 SublimeText中 Tools -&amp;gt; Build System -&amp;gt; N..._mac sublime 调试typescript项目

使用Docker在windows上安装IBM MQ_win系统中,可视化工具连接其他服务上的ibmmq-程序员宅基地

文章浏览阅读859次,点赞18次,收藏8次。Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察。

软考—系统集成管理工程师备考经验_信息系统管理工程师真题百度云-程序员宅基地

文章浏览阅读362次,点赞6次,收藏8次。关于软考--系统集成管理工程师的学习总结和教训_信息系统管理工程师真题百度云

淘宝/天猫自定义API操作 API接口,custom-自定义API操作-程序员宅基地

文章浏览阅读887次,点赞24次,收藏23次。淘宝/天猫平台本身并不直接提供“自定义API操作”的官方API接口。API接口通常是由平台方定义和提供的,用于开发者与平台进行数据交互。然而,淘宝/天猫开放平台允许商家和开发者通过其提供的官方API进行一系列的操作,这些API覆盖了商品管理、订单处理、用户信息、物流查询等多个方面。您可以利用淘宝/天猫开放平台提供的官方API,通过组合多个API调用,来实现您自定义的业务逻辑。这可能需要一定的编程能力和对平台API的深入理解。

Ubuntu 16.04简易安装Nginx-rtmp-module_libnginx-mod-rtmp_1.22.0-1ubuntu3_amd64.deb-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏5次。Ubuntu 16.04简易安装Nginx-rtmp-modulelibnginx-mod-rtmp是18.04上自带的,可以通过apt-get install libnginx-mod-rtmp进行安装,在16.04上如果想要安装,直接下载libnginx-mod-rtmp_1.14.0-0+xenial1_amd64.deb安装的话会被告知nginx版本过低,依赖有问题,需要16.04自带的..._libnginx-mod-rtmp_1.22.0-1ubuntu3_amd64.deb

mysql 字符 1024个字符限制 cast转为varchar 不限制字符长度 最大字符长度 group_concat长度限制_mysql 改变输出字符串最大长度-程序员宅基地

文章浏览阅读1.1k次。设置group_concat的最大长度然后再运行。_mysql 改变输出字符串最大长度

随便推点

《游戏开发》html5 益智小游戏-小熊吃星星-程序员宅基地

文章浏览阅读962次,点赞17次,收藏26次。你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。我特地针对初学者整理一套前端学习资料,免费分享给大家,戳这里即可免费领取!!!自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

Java模拟面试总结,新网银行java面试-程序员宅基地

文章浏览阅读534次,点赞9次,收藏14次。无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远。

centos出现类似-bash: ls: command not found...和-bash: /bin/vi: input/output error的错误_-bash: /usr/libexec/pk-command-not-found: input/ou-程序员宅基地

文章浏览阅读7.5k次。centos出现类似-bash: ls: command not found...和-bash: /bin/vi: input/output error的错误_-bash: /usr/libexec/pk-command-not-found: input/output error

[Flutter翻译]GSoC ‘21:为Flutter创建一个桌面样本_flutter 桌面模板(1)-程序员宅基地

文章浏览阅读815次,点赞16次,收藏29次。两个主要的东西是能够从现有的analysis_options.yaml文件中加载配置文件,以及在规则列表中搜索特定规则的能力。经过与他和组织管理员的讨论,我找到了一个可以工作的项目。经过与Brett和团队的讨论,我们决定建立一个桌面样本,同时也是一个工具,帮助开发者管理他们项目的lint规则。今年,在Flutter Engage上,Flutter的桌面支持的测试版快照被纳入了稳定频道。你可以为不同类型的项目创建不同的规则配置文件。不幸的是,由于导师的不到位,今年的。这个博客显示了我为我的项目所做的工作。

ARC/OC对象自动管理内存_arc oc-程序员宅基地

文章浏览阅读1w次。ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系,而不用考虑对象的retain和release。转自hherima的博客原文:Transitioning to ARC Release Notes(苹果官方文档) ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系_arc oc

JAVA设计模式(09):结构型-代理模式(Proxy)_pengzhile 是谁-程序员宅基地

文章浏览阅读5.8k次。代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。1 代理模式概述近年来,代购已逐步成为电_pengzhile 是谁

推荐文章

热门文章

相关标签