🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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 中计算斐波那契数列:经典循环,递归算法和函数方式。