美文网首页
[java练习]斐波那契数列的三种实现方式

[java练习]斐波那契数列的三种实现方式

作者: AceCream佳 | 来源:发表于2018-04-03 13:15 被阅读0次

    我以为我以前写过,想复习一下才发现我没写过。。。
    直接把我代码贴出来了,注释都写的很清楚了

    /***
     * 说斐波那契数列三种实现
     * 0,1,1,2,3,5,8,13
     * 可以得出来结论
     * F(0)=0
     * F(1)=1
     *
     * F(2)=F(0)+F(1)=1
     * F(3)=F(1)+F(2)=F(1)+( F(0)+F(1) ) = 2
     * ......
     * F(n)=F(n-2)+F(n-1)
     * 这个如果细化分解的话,最终会回归到只有F(0)和F(1)的问题里面去,也就是等号右边全是F(0)和F(1)
     *
     *
     */
    public class Fib {
    
        /**
         * 递归实现
         * @param n 第n项
         * @return
         */
        public static int fib1(int n){
            if (n<0){
                return -1;
            }
            if (n==0){
                return 0;
            }
            if (n == 1) {
                return 1;
            }
            return fib1(n-2) + fib1(n-1);
        }
    
        /**
         * 基于变量实现
         * 卸磨杀驴型 = = 用完就给你覆盖上
         * @param n
         * @return
         */
        public static int fib2(int n){
            if (n<0){
                return -1;
            }
            if (n==0){
                return 0;
            }
            if (n == 1 || n==2) {
                return 1;
            }
            int a = 1;
            int b = 1;
            int result = 0;
            for (int i=3;i<=n;i++){
                result = a+b;
                a=b;
                b=result;
            }
            return result;
        }
    
        /**
         * 基于数组实现
         * 这个有个好处。
         * 如果需要的话,可以直接把整条斐波那契数列全带出来。直接返回数组就可以了
         * @param n
         * @return
         */
        public static int fib3(int n){
            if (n<0){
                return -1;
            }
            if (n==0){
                return 0;
            }
            if (n == 1 || n==2) {
                return 1;
            }
            int[] array = new int[n+1];
            array[0]=0;
            array[1]=1;
            array[2]=1;
            for (int i=3;i<=n;i++){
                array[i]=array[i-2]+array[i-1];
            }
            return array[n];
        }
    
    
        public static void main(String[] args) {
            System.out.println(fib1(6));
            System.out.println(fib2(6));
            System.out.println(fib3(6));
        }
    }
    

    相关文章

      网友评论

          本文标题:[java练习]斐波那契数列的三种实现方式

          本文链接:https://www.haomeiwen.com/subject/uwbqhftx.html