【问题标题】:how to create a stream providing f(n)=f(n-2)+f(n-3) in scala如何在 scala 中创建提供 f(n)=f(n-2)+f(n-3) 的流
【发布时间】:2015-07-03 10:35:24
【问题描述】:

我试过了:

val s1:Stream[Int]=1 #:: 0 #:: 1 #:: 1 #:: (s1.tail.tail.tail,s1.tail.tail).zipped.map{(c,d) => c + d}.toStream

但是

s1(5)

引发堆栈溢出...

我成功地用 2 个参数编写了正确的定义:

val s2:Stream[Int]=1 #:: 0 #:: 1 #:: 1 #:: (s2.tail.tail.tail.zip(s2.tail.tail)).map{n=> n._1+n._2}

但我将来会想要添加超过 2 个列表,这就是为什么我希望能够使用“zipped”而不是“zip”。

谢谢

【问题讨论】:

  • zipped 被无限序列破坏。不要使用它,无论如何你只能将它用于 2 或 3 元组。

标签: scala stream


【解决方案1】:

Stream.iterate((1, 0, 1))({case (a, b, c) => (b, c, a + b)}).map(_._3) 呢?

【讨论】:

    【解决方案2】:

    看起来这段代码正确地生成了你的序列:

    val s:Stream[Int]=1 #:: 0 #:: 1 #:: 1 #:: (s.tail zip s.tail.tail).map {t => t._1 + t._2}
    

    例如:

    s(7) = 3
    s(8) = 4
    s(10) = 7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多