数据结构与算法练习 - 费式数列

数据结构与算法练习

费式数列

1 1 2 3 5 8 13 21 ...

要求:编程实现费式数列中第n项的数值并返回

1. 递归实现
public static int Fee(int n){
        if (n == 1 || n == 2) {
            return 1;
        } else {
            return Fee(n-1) + Fee(n-2);
        }
    }

    public static void main(String[] args) {
        System.out.println(Fee(8));
    }
2. 递推实现
static int Fee(int n){
        int ia = 1;
        int ib = 1;
        int ic;

        for (int i = 3; i <= n; i++) {
                ic = ia + ib;
                ia = ib;
                ib = ic;
        }

        return ib;
    }
    public static void main(String[] args) {
        System.out.println(Fee(55));
    }

思路:归纳法

int ia =1, int ib =1;

当n=1时,return 1 => return ib

当n=2时,return 1 => return ib

当n=3时, return 2 => ic = ia + ib; ia = ib; ib = ic => return ib

当n=4时,return 3 => ic = ia + ib; ia = ib; ib = ic => return ib

当n>2 时,执行n-2次,ic是为了ia和ib同时往后移动,如果不加入ic,ib=ia+ib,ib变化以后ia并没有移到ib变化之前的位置

posted @ 2020-10-20 11:57  Pengc931482  阅读(106)  评论(0)    收藏  举报