java实现斐波那契数列

在这里插入图片描述
如图,可以看到斐波那契数列是一组有规律的数列,第一项和第二项都是1,从第三项开始,都是前两项的和,以此为规律,向后延伸。


/**
 * 斐波那契数列实现
 * 斐波那契数列是一组有序序列,在第一个和第二个元素都为1
 * 往后的数据,都等于前两个数据相加的和
 */
public class Fb {

    /**
     * 利用递归方式实现
     * @param n
     * @return
     */
    public int fb1(int n ){
        if (n <=2){
            return 1;
        }
        return fb1(n -1)+fb1(n-2);
    }



    /**
     * 在上边递归过程中,我们发现,有大量的重复计算,例如f(5) = f(3)+f(4);f(4) = f(3)+f(2)
     * 这个时候,我们使用递归,重复计算了f(3)的值多次,因此可以引入一个缓存,来记录已经计算过的值,如果存在,直接返回
     * 避免多次重复计算
     * @param n
     * @return
     */
    int [] memory;
    public int fb2(int n){
        if (memory==null){
            memory = new int[n+1];
        }
        if (memory[n] != 0){
            return memory[n];
        }
        if (n == 1 || n == 2){
            return 1;
        }
        int result = fb2(n -1) + fb2(n-2);
        memory[n] = result;
        return result;
    }

    /**
     * 以上计算过程中,都是从要计算的位置的数据,进行递归,由上向下计算的
     * 我们还可以从下向上,计算,直到要计算位置的数据,
     * 避免递归数据的出现
     * @return
     */
    public int fb3( int n){
        int fn_1 = 1;// 指定第一个数据为1
        int fn_2 = 1;// 指定第二个数据为1
        int fn = 0;// 要计算的数据的值
        for (int i = 3;i<=n ;i++){
            fn = fn_1 + fn_2; // 计算fn=前两项数据的和
            fn_1 = fn_2;// 替换fn前两项的数据值,分别向后移动一位
            fn_2 = fn;
        }
        return fn;
    }

    public static void main(String[] args) {
        Fb fb = new Fb();
        int r1 = fb.fb1(7);
        System.out.println(r1);
        int r2 = fb.fb2(7);
        System.out.println(r2);
        int r3 = fb.fb3(7);
        System.out.println(r3);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值