【发布时间】:2013-12-23 03:29:01
【问题描述】:
Stream 文档中有一个很好的例子,它可以获取斐波那契数。
val fibs:Stream[Int] = 0 #:: 1 #:: fibs.zip(fibs.tail).map { n => n._1 + n._2 }
我想通过滑动来实现,所以我尝试了以下操作。
val test = 0 #:: 1 #:: Stream.empty
test.sliding(2).map(_.sum).toStream
最后一行正确获取 Stream(1, ?) 但是当我按如下方式将其连接到上面时,当我尝试获得第三个成员。
val fibs2:Stream[Int] = 0 #:: 1 #:: fibs2.sliding(2).map(_.sum).toStream
如果我如下给出 3 个数字,它会计算前两个数字的总和。但这不是斐波那契数。
val fibs3:Stream[Int] = 0 #:: 0 #:: 1 #:: fibs3.sliding(2).map(_.sum).toStream
任何想法或帮助将不胜感激。
更新
- 我怀疑错误的原因是滑动方法返回Iterator,它需要知道使用hasNext方法是否有next值
- 如果给定第一个播种机,则滑动方法应计算前 n 个数字的总和,这些数字称为 tribonacci (n=3)、tetranacci (n=4) 等。
【问题讨论】:
标签: scala stream fibonacci sliding