zoukankan      html  css  js  c++  java
  • 斐波那契数列的两种实现方式

    1、斐波那契数列是什么

    斐波那契数列,也称之为斐波那契数,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

    2、递归方式实现

        /**
         * 递归方式实现 斐波那契
         * @param n
         * @return
         */
        public static long fibDG(int n) {
            if (n <= 1) {
                return n;
            } else {
                return fibDG(n - 1) + fibDG(n - 2);
            }
        }

    这个方法在 main 方法内进行调用的时候,参数小于45的时候,运行可以出结果,但是参数再打一点运行相当慢。原因是这种实现方式每次调用都是从头开始调用,使得效率很低,

    3、循环方式实现斐波那契

    for 循环实现
        /**
         * for 循环实现 斐波那契
         * @param n
         * @return
         */
        public static long fibFor(int n) {
            if (n <= 1) return n;
            /*
            优化逻辑:把计算的数据 保存下来,以便下次计算 从而节省资源开销
             */
            long first = 0;
            long second = 1;
            for (int i = 0; i < n - 1; i++) {
                long sum = first + second;
                first = second;
                second = sum;
            }
            return second;
        }

    for 循环实现的 斐波那契 效率相比递归实现大大的提升,因为循环实现记录了中间的计算结果,不用每次从底层重新计算,而是把保存的结果读取在计算即可。

    while 循环实现

      /**
         * While 循环实现 斐波那契 优化
         * @param n
         * @return
         */
        public static long fibWhile(int n) {
            if (n <= 1) return n;
            /*
            优化逻辑:把计算的数据 保存下来,以便下次计算 从而节省资源开销
             */
            long first = 0;
            long second = 1;
            while (n-- > 1) {
                second += first;
                first = second - first;
            }
            return second;
        }

    while 循环比的第二种for循环实现的效率略有提高。实现方式大致一样。

  • 相关阅读:
    Tomcat的配置
    虚拟机类加载机制
    深入理解java虚拟机之自动内存管理机制(四)
    深入理解java虚拟机之自动内存管理机制(三)
    深入理解java虚拟机之自动内存管理机制(二)
    深入理解java虚拟机之自动内存管理机制(一)
    Java的设计模式(三)
    Java的设计模式(二)
    Java的设计模式(一)
    大数据交易风控体系之智能决策引擎
  • 原文地址:https://www.cnblogs.com/wdh01/p/15708455.html
Copyright © 2011-2022 走看看