Java斐波那契数列

来源:互联网 发布:引物设计软件olige 编辑:程序博客网 时间:2024/06/08 17:20

斐波那契数列定义如下:
当n=0时,f(0) = 0;
当n=1时,f(1) = 1;
当n>1时,f(n) = f(n-1)+f(n-2);
下面分别演示递归算法和非递归算法:
1.递归算法

    public static int fibonacci(int n) throws Exception {        if (n < 0)            throw new Exception("n为非法值!");        if (n == 0)            return 0;        if (n == 1)            return 1;        return fibonacci(n - 1) + fibonacci(n - 2);    }

斐波那契的递归算法效率很低,效率低下的原因是重复计算值。当n=100时,慢的要死。

2.非递归算法

    /**     * 改进后的算法     *      * @param n     * @return     * @throws Exception     */    public static long fibonacci2(int n) throws Exception {        if (n < 0)            throw new Exception("n为非法值!");        if (n == 0)            return 0;        if (n == 1)            return 1;        long f0 = 0L;        long f1 = 1L;        long fn = 0;        for (int i = 2; i <= n; i++) {            fn = f0+f1;            f0 = f1;            f1 = fn;        }        return fn;    }

递归算法的变种:
一只青蛙一次可以跳上1级台阶,也可以跳上2级,求该青蛙跳上一个n级台阶总共有多少种跳法。
分析:首先如果只有1级台阶,显然只有一种跳法。如果有2级台阶,就有两种跳法:跳两个一级和一次跳两级。
接着讨论其他情况,如果有n级台阶(n>1)。青蛙第一次跳的时候分两种情况,第一次是跳一级,那么就有f(n-1)种跳法,如果第一次跳两级,那么就有f(n-2)种跳法,所以f(n) = f(n-1)+f(n-2);典型的斐波那契数列。

0 0