斐波那契的三种写法

问题描述

   //    斐波那契数列  输入序列,返回值
   //    (1,1,2,3,5,8,13,21,。。。。。)
   //         例如  input 3 output 3

递归版

 //    递归版
    @Test
    void feibonaqi2() {
        int sum=sum2(-9);
        System.out.println(sum);
    }

    private int sum(int n) {
        if (n <0) {
            return -1;
        }
        if (n <3) {
            return 1;
        }
        return  sum(n-1)+sum(n-2);
    }

不递归版

    void feibonaqi() {
        int sum=sum(-1);
        System.out.println(sum);
    }

    private int sum(int n) {
        if (n <0) {
            return -1;
        }
        if (n <3) {
            return 1;
        }
        int last=1;
        int back=1;
        int cur=1;
        for (int i = 3; i < n+1; i++) {
            cur=last+back;
            last=back;
            back=cur;
        }
        return cur;
    }

栈版

    @Test
    void feibonaqi3() {
        int sum=sum(5);
        System.out.println(sum);
    }

    private int sum(int n) {
        if (n <0) {
            return -1;
        }
        if (n <3) {
            return 1;
        }
        int last=1,back=1,cur=0;

        Stack<Integer> stack = new Stack<>();
        stack.push(last);
        stack.push(back);
        for (int i = 3; i < n+1; i++) {
            back=stack.pop();
            last=stack.pop();
            cur=last+back;
            stack.push(back);
            stack.push(cur);
        }
        return cur;
    }

话外:计算机如何从一到无穷大

矩阵加速法

 对我来说还是有点难啊
posted @ 2021-06-29 14:54  庭有奇树  阅读(145)  评论(1编辑  收藏  举报