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循环实现的效率略有提高。实现方式大致一样。

  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/wdh01/p/15708455.html
Copyright © 2011-2022 走看看