You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Lambda表达式的斐波那契数列代码逻辑解析请求

这段Lambda实现斐波那契数列的逻辑详解

先把你的代码贴出来:

Stream.iterate(new Long[] {0L, 1L}, p -> new Long[] {p[1], p[0]+p[1]}).map(p -> p[0]);

咱们拆成两部分一步步拆解逻辑:

1. Stream.iterate:生成迭代的数组流

Stream.iterate是Java 8用来生成无限有序流的方法,它需要两个核心参数:

  • 初始种子:这里是new Long[] {0L, 1L},对应斐波那契数列的前两个起始数;
  • 迭代函数:p -> new Long[] {p[1], p[0]+p[1]},这个Lambda的作用是用当前数组生成下一组迭代的基础数据。

手动模拟每一轮迭代的变化:

  • 初始数组:[0, 1]
  • 第一次迭代:基于初始数组p,生成新数组[p[1], p[0]+p[1]] → [1, 0+1=1]
  • 第二次迭代:基于数组[1,1],生成新数组[1, 1+1=2]
  • 第三次迭代:基于数组[1,2],生成[2, 1+2=3]
  • 第四次迭代:基于数组[2,3],生成[3, 2+3=5]
  • ...以此类推,每一轮迭代都会产出一个包含「待输出的数列项」和「下一项计算依据」的数组。

2. map(p -> p[0]):提取斐波那契数列的每一项

map操作负责转换流中的元素,这里的p -> p[0]就是把每一轮迭代生成的数组的第一个元素提取出来,作为最终流的输出项。

对应上面的迭代过程,提取出的元素依次是:
0 → 1 → 1 → 2 → 3 → 5... 正好是标准的斐波那契数列顺序。

注意:这个流是无限流,实际使用时必须用limit(n)限制输出项数,比如要打印前10项:

Stream.iterate(new Long[] {0L, 1L}, p -> new Long[] {p[1], p[0]+p[1]})
      .map(p -> p[0])
      .limit(10)
      .forEach(System.out::println);

内容的提问来源于stack exchange,提问作者João Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:20:45