• 动态规划求斐波那契数列


    1.递归方式

    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        System.out.println(start);
        System.out.println(fibonacci(50));
        long end=System.currentTimeMillis();
        System.out.println(end);
        System.out.println("用时:"+(end-start)+"ms");
    }
    
    public static double fibonacci(int n){
       if(n==0){
           return 0;
       }
       if(n==1){
           return 0;
       }
       if(n==2){
           return 1;
       }
       return fibonacci(n-2)+fibonacci(n-1);
    }

     可以看到递归的方式,效率非常低,非常耗时,而且求大一点的数的时候,可能会直接溢出

    2. 动态规划

    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        System.out.println(start);
        System.out.println(fibonacci(50));
        long end=System.currentTimeMillis();
        System.out.println(end);
        System.out.println("用时:"+(end-start)+"ms");
    }
    
    public static double fibonacci(int n){
        if(n==0){
            return 0;
        }
        double [] temp=new double[n];
        temp[0]=0;
        temp[1]=1;
        if(n>1){
            for(int i=2;i<n;i++){
                temp[i]=temp[i-1]+temp[i-2];
            }
        }
        return temp[n-1];
    }

     对比一下,动态规划的效率比递归快了不止一个量级

  • 相关阅读:
    sizeof()使用错例:sizeof(i++)
    修改linux命令符和解决命令符太长的问题
    【转载】阻止拷贝的三种方式
    git命令几个总结
    scp用法
    RAII
    a linked list
    c++11之函数式编程实例
    [转]基于SAML的单点登录介绍
    [转]OAuth、OAuth2与OpenID区别和联系
  • 原文地址:https://www.cnblogs.com/luo-jian/p/12882798.html
Copyright © 2020-2023  润新知