# Java 斐波那契

原文：http://zetcode.com/java/fibonacci/

Java fibonacci 教程展示了如何计算 Java 中的 fibonacci 序列。 我们创建了几种计算斐波那契数列的算法。

斐波那契数列是一个值序列，每个值都是从 0 和 1 开始的两个前一个数字的和。因此，该序列的开头是：0、1、1、2、3、5、8、13、21、34、55、89、144 ...

在本教程中，我们展示了几种用 Java 生成斐波那契数列的方法。 由于斐波那契数列是一个无限数的序列，因此我们使用`BigInteger`类型进行计算。

## Java 斐波那契经典循环示例

第一种算法使用`for`循环。

`FibonacciLoopEx.java`

```java
package com.zetcode;

import java.math.BigInteger;

public class FibonacciLoopEx {

    public static BigInteger fibonacci(int n) {

        if (n <= 1) return BigInteger.valueOf(n);

        BigInteger previous = BigInteger.ZERO, next = BigInteger.ONE, sum;

        for (int i = 2; i <= n; i++) {

            sum = previous;
            previous = next;
            next = sum.add(previous);
        }

        return next;
    }

    public static void main(String[] args) {

        for (int i = 0; i <= 99; i++) {

            BigInteger val = fibonacci(i);
            System.out.println(val);
        }
    }
}

```

该示例打印斐波那契数列的前一百个值。

## Java 斐波那契递归示例

在第二个示例中，我们使用递归算法计算斐波那契数列，其中`fibonacci()`方法调用自身进行计算。

`FibonacciRecursiveEx.java`

```java
package com.zetcode;

import java.math.BigInteger;

public class FibonacciRecursiveEx {

    public static BigInteger fibonacci(int n) {

        if (n == 0 || n == 1) {
            return BigInteger.ONE;
        }

        return fibonacci(n - 2).add(fibonacci(n - 1));
    }

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {
            System.out.println(fibonacci(i));
        }
    }
}

```

该示例计算斐波那契序列的前十个值。

## Java 斐波那契流示例

第三个示例使用 Java8 流进行计算。

`FibonacciStreamEx.java`

```java
package com.zetcode;

import java.math.BigInteger;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FibonacciStreamEx {

    public static List<BigInteger> fibonacci(int limit) {

        var vals = Stream.iterate(new BigInteger[] { BigInteger.ZERO, BigInteger.ONE },
                t -> new BigInteger[] { t[1], t[0].add(t[1]) })
                .limit(limit)
                .map(n -> n[1])
                .collect(Collectors.toList());

        return vals;
    }

    public static void main(String[] args) {

        System.out.println(fibonacci(100));
    }
}

```

本示例计算值到一定限制。

在本教程中，我们展示了如何以三种不同的方式在 Java 中计算斐波那契数列：经典循环，递归算法和函数方式。