当前位置: 首页 > 面试题库 >

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

田永春
2023-03-14
问题内容

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

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

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

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

我们如何做到这一点?


问题答案:

最简单的解决方案是使用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]));

由于缺少标准对类型,因此使用了两个元素的数组。此外,.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];


 类似资料:
  • 我一直在试图理解Scheme中的尾部递归,我很难理解在使用斐波那契尾部递归的go-to示例中发生了什么。。。 如果这是尾递归或迭代斐波那契的代码: 我基本上可以理解每一行上发生的事情,除了这里: 这一行到底发生了什么?我在任何地方都找不到解释。我是计划的新手,到目前为止语法非常混乱。 或者有人能解释每一行发生了什么吗?这是我的基本理解,但我不确定我是否正确: 谢谢

  • 问题内容: 我在大学为我的Programming II类编写的程序需要一些帮助。这个问题要求人们使用递归来计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并减少计算时间。 我设法使程序在没有数组和存储的情况下运行,现在我试图实现该功能,但遇到了麻烦。我不确定如何组织它。我已经浏览了Google并浏览了一些书,但没有太多帮助我解决如何实施解决方案的方法。 上面是不正

  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波

  • 我试图想出一个程序,从用户那里获取任何数字,并生成斐波那契码的第n个数字。当我完成工作时,它会显示下一个,而不是我需要的。例如,我正在寻找第11个#和它的生产233而不是144。这是我的代码:

  • 本文向大家介绍JAVA递归与非递归实现斐波那契数列,包括了JAVA递归与非递归实现斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…

  • Python3 实例 以下代码使用递归的方式来生成斐波那契数列: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n