📜  biginteger 的斐波那契 - Java (1)

📅  最后修改于: 2023-12-03 15:13:39.256000             🧑  作者: Mango

Java 实现大整数斐波那契数列

在 Java 中,我们可以使用 BigInteger 类实现大整数斐波那契数列。在本文中,我们将使用递归和循环两种方式来实现斐波那契数列。

递归实现

递归是最简单也是最直接的方式来实现斐波那契数列。我们只需要定义一个递归函数来计算斐波那契数列即可。

import java.math.BigInteger;

public class Fibonacci {

    public static BigInteger fib(int n) {
        if (n == 0) {
            return BigInteger.ZERO;
        } else if (n == 1) {
            return BigInteger.ONE;
        } else {
            return fib(n - 1).add(fib(n - 2));
        }
    }

    public static void main(String[] args) {
        int n = 100;
        System.out.println("斐波那契数列第 " + n + " 项的值为:" + fib(n));
    }

}

在上面的代码中,我们定义了一个 fib 函数,它返回斐波那契数列的第 n 项的值。如果 n 等于 0,函数返回 0;如果 n 等于 1,函数返回 1;否则,函数递归调用 fib(n - 1)fib(n - 2),并返回它们的和。

main 函数中,我们指定 n 的值为 100,然后输出斐波那契数列的第 100 项的值。

循环实现

尽管递归实现是最简单的方式,但它的效率并不高,因为在计算斐波那契数列的第 n 项时,它需要递归调用 fib(n - 1)fib(n - 2) 两次。为了提高效率,我们可以使用循环来实现斐波那契数列。

import java.math.BigInteger;

public class Fibonacci {

    public static BigInteger fib(int n) {
        if (n == 0) {
            return BigInteger.ZERO;
        } else if (n == 1) {
            return BigInteger.ONE;
        } else {
            BigInteger a = BigInteger.ZERO;
            BigInteger b = BigInteger.ONE;
            BigInteger c = BigInteger.ZERO;
            for (int i = 2; i <= n; i++) {
                c = a.add(b);
                a = b;
                b = c;
            }
            return c;
        }
    }

    public static void main(String[] args) {
        int n = 100;
        System.out.println("斐波那契数列第 " + n + " 项的值为:" + fib(n));
    }

}

在上面的代码中,我们定义了一个 fib 函数,它返回斐波那契数列的第 n 项的值。如果 n 等于 0,函数返回 0;如果 n 等于 1,函数返回 1;否则,我们使用三个 BigInteger 变量 a、b 和 c 来实现循环方式计算斐波那契数列。在循环中,每一次计算都是将 a 和 b 的值相加,然后将结果赋给 c。接着,更新 a 的值为 b,b 的值为 c。最后,函数返回 c 的值。

main 函数中,我们指定 n 的值为 100,然后输出斐波那契数列的第 100 项的值。

这就是 Java 中实现大整数斐波那契数列的两种方式。如果您需要计算更大的斐波那契数列,只要将 n 的值更改为您需要的值即可。