斐波那契java循环代码

斐波那契定义

众所周知的斐波那契数列是以下规则:
1、1、2、3、5、8、13、21…
从第三位数字开始,每个值等于前两个数值之和。

java代码实现循环

package FibonacciSequence;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class Fib{
    public static void main(String[] args) {

        System.out.println(fibLoop(4));
        System.out.println(fibRec(10));
        System.out.println(fibBig(98));
        System.out.println(fibBig(99));
    }
    public static long fibLoop(int num) {
        if(num < 1 || num > 92)
            return 0;
        long a = 1;
        long b = 1;
        long temp;
        for(int i = 3; i <= num; i++) {
            temp = a;
            a = b;
            b += temp;
        }
        return b;
    }

//②==================================
    /**
     * 递归方法实现
     * f(n) = f(n - 1) + f(n - 2)
     * 最高支持 n = 92 ,否则超出 Long.MAX_VALUE
     * @param num n
     * @return f(n)
     */
    public static long fibRec(int num) {
        if(num < 1)
            return 0;
        if(num < 3)
            return 1;
        return fibRec(num - 1) + fibRec(num - 2);
    }

    //③==================================
    static long[] l = new long[93];
    static {
        l[1] = 1;
    }
    /**
     * 带有缓存的方法,比fibRec方法性能好很多
     */
    public static long fibBuffRec(int num) {
        if(num < 1 || num > 92)
            return 0;
        if(l[num] == 0)
            l[num] = fibBuffRec(num - 1) + fibBuffRec(num - 2);
        return l[num];
    }

    //④==================================
    static List<BigDecimal> list = new ArrayList<BigDecimal>(93);
    static {
        list.add(BigDecimal.ZERO);
        list.add(BigDecimal.ONE);
    }
    /**
     * 1,2,3,4,5,6, 7 ,8
     * 1,1,2,3,5,8,13,21
     * 支持num超过92的超大型数字,使用了ArrayList进行缓存以提高性能
     */
    public static BigDecimal fibBig(int num) {
        if(num < 0)
            return list.get(0);
        if (list.size() <= num)
            list.add(fibBig(num - 1).add(fibBig(num - 2)));
        return list.get(num);
    }

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值