Loading

斐波拉契数列(Lambda表达式)

FibonacciSequence

package top.dj.test;

import java.math.BigInteger;
import java.util.stream.LongStream;
import java.util.stream.Stream;

/**
 * @Author DengJia
 * @Date 2021/7/30 10:19
 * @Description 斐波拉契数列
 */

public class FibonacciSequence {
    static long a = 0, b = 1;

    static BigInteger preInt = new BigInteger("0");
    static BigInteger nextInt = new BigInteger("1");

    public static void main(String[] args) {
        /* Integer,Long 数据类型长度有限,会溢出 */
        // fibonacciLongStream();

        /* BigInteger 使用麻烦一点,但不会有溢出问题 */
        // fibonacciBigInteger();

        /* 使用泛型接口实现的斐波拉契数列 */
        // fibonacciGenericity();
    }

    public static void fibonacciLongStream() {
        LongStream.generate(() -> {
            long tmp = a;
            a = b;
            b += tmp;
            return a;
        }).limit(100).forEach(System.out::println);
    }

    public static void fibonacciBigInteger() {
        Stream.generate(() -> {
            BigInteger tmp = preInt;
            preInt = nextInt;
            nextInt = nextInt.add(tmp);
            return preInt;
        }).limit(200).forEach(System.out::println);
    }

    private static void fibonacciGenericity() {
        Fibonacci gen = new Fibonacci();
        Stream.generate(gen::next).limit(10).forEach(System.out::println);
    }
}

class Fibonacci implements Generator<Integer> {
    private int count = 0;

    @Override
    public Integer next() {
        return fib(count++);
    }

    private int fib(int n) {
        return n < 2
                ? 1
                : fib(n - 2) + fib(n - 1);
    }
}

Generator

package top.dj.test;

/**
 * @Author: DengJia
 * @Date: 2023/6/8
 * @Description: 生成器无需额外的信息就能创建对象,
 * 一般而言,一个生成器只定义一个方法,该方法用以产生新的对象。
 */

public interface Generator<T> {
    T next();
}

posted @ 2021-07-30 10:33  溫柔の風  阅读(147)  评论(0编辑  收藏  举报