求斐波那契数列第n个数的值

2018-08-02  本文已影响0人  junjun2018

1,1,2,3,5,8,13。。。
规律就是后面的一个数等于前面两个数的和。

public class Feibonaqie {
    public static void main(String[] args) {
        //1,1,2,3,5,8
        int num = getNumByLoop(6);
        int num1 = getNumByRecursor(7);

        System.out.println(num);
        System.out.println(num1);
    }

    //循环实现
    private static int getNumByLoop(int n) {
        //定义前两个数
        int num1 = 1;
        int num2 = 1;
        int num3 = 0;
        if (n == 1) return 1;
        if (n == 2) return 1;

        //经观察,求第n个数,循环的次数为n-2
        for (int i = 0; i < n - 2; i++) {
            //将原本2位置的数当做1位置的数,累加的结果作为2位置的数
            num3 = num1 + num2;
            num1 = num2;
            num2 = num3;
        }
        return num3;
    }

    //递归实现
    public static int getNumByRecursor(int n) {
        //递归一定要有结束条件
        if (n == 1 || n == 2) {
            return 1;
        }else{
            return getNumByRecursor(n - 1) + getNumByRecursor(n - 2);
        }
    }
}

递归是相当耗费资源的,就像细胞分裂一样,要最终都分解到不能分解才能得出结果。而使用循环只不过循环了n-2次。递归经常用在树的遍历中。例如遍历某文件夹下的所有文件。递归是没效率可言的。
研究递归,最关键是的,找到返回条件。推荐电影《盗梦空间》,经典应用八皇后,汉诺塔

上一篇 下一篇

猜你喜欢

热点阅读