gpt4 book ai didi

用于求解斐波那契的 Java 8 Lambda 表达式(非递归方式)

转载 作者:IT老高 更新时间:2023-10-28 20:50:50 25 4
gpt4 key购买 nike

我是在 Java 8 中使用 Lambda 表达式功能的初学者。Lambda 表达式在解决诸如质数检查、阶乘等程序时非常有用。

但是,它们可以有效地用于解决像斐波那契这样的问题,其中当前值取决于前两个值的总和。我已经很好地使用 Lambda 表达式有效地解决了质数检查问题。下面给出了相同的代码。

boolean checkPrime=n>1 && LongStream.range(2, (long) Math.sqrt(n)).parallel().noneMatch(e->(n)%e==0);

在上述 noneMatch 方法的代码中,我们使用范围内的当前值 (e) 进行评估。但是对于斐波那契问题,我们需要前两个值。

我们怎样才能做到这一点?

最佳答案

最简单的解决方案是使用 Pairs 流:

Stream.iterate(new long[] { 1, 1 }, p -> new long[] { p[1], p[0] + p[1] })
.limit(92)
.forEach(p -> System.out.println(p[0]));

由于缺少标准的pair类型,它使用了一个二元素数组。此外,我使用 .limit(92) 因为我们无法使用 long 值评估更多元素。但是很容易适应BigInteger:

Stream.iterate(new BigInteger[] { BigInteger.ONE, BigInteger.ONE },
p -> new BigInteger[] { p[1], p[0].add(p[1]) })
.forEach(p -> System.out.println(p[0]));

这将一直运行,直到您没有足够的内存来表示下一个值。

顺便说一下,从流中获取第n个元素:

Stream.iterate(new long[] { 1, 1 }, p -> new long[] { p[1], p[0] + p[1] })
.limit(91)
.skip(90)
.findFirst()
.get()[1];

关于用于求解斐波那契的 Java 8 Lambda 表达式(非递归方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com