斐波那契数列-递归及for实现

satuo20 1年前 ⋅ 836 阅读

使用int或long型计算时,很快就会因为大小超过能存储的位,造成返回负数,所以提供了一个BigDecimal的实现,避免数据溢出。

斐波那契数列定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)


    //Fibonacci sequence
    //递归实现
    private static long fibonacci(int n) {
        if(n == 0) {
            return 0;
        }
        if(n == 1) {
            return 1;
        }
        return fb(n-1)+fb(n-2);
    }
    
    //for循环实现
    private static long fibonacci(int n) {
        if(n == 0) {
            return 0;
        }
        if(n == 1) {
            return 1;
        }
        
        //第n-2个元素
        long pre2 = 0;
        //第n-1个元素
        long pre1 = 1;
        //fn的值
        long fn = 0;
        for (int i = 2; i <= n; i++) {
            fn = pre2 + pre1;
            pre2 = pre1;
            pre1 = fn;
        }
        return fn;
    }
    
    //BigDecimal版本的for循环实现,避免long型的溢出问题
    private static BigDecimal fbWithBigDecimal(int n) {
        if(n == 0) {
            return BigDecimal.valueOf(0);
        }
        if(n == 1) {
            return BigDecimal.valueOf(1);
        }
        BigDecimal pre2 = BigDecimal.valueOf(0);
        BigDecimal pre1 = BigDecimal.valueOf(1);
        BigDecimal fn = null;
        for (int i = 2; i <= n; i++) {
            fn = pre2.add(pre1);
            pre2 = pre1;
            pre1 = fn;
        }
        return fn;
    }

全部评论: 0

    我有话说: