- 소스코드 출처 : O'REILLY 스파크를 활용한 실시간 처리
상태 기반 피보나치 원소 연산
scala> val ints = Stream.from(0)
ints: scala.collection.immutable.Stream[Int] = Stream(0, ?)
scala> val fibs = (ints.scanLeft((0,1)) {
| case ((previous, current), index) => (current, (previous + current))
| })
fibs: scala.collection.immutable.Stream[(Int, Int)] = Stream((0,1), ?)
scala> fibs.take(8).print
(0,1), (1,1), (1,2), (2,3), (3,5), (5,8), (8,13), (13,21), empty
scala>
scala> fibs.map{ case (x, y) => x}.take(8).print
0, 1, 1, 2, 3, 5, 8, 13, empty
- n번째 요소를 얻기 위해 n-1 번째 요소를 처리
비상태 기반 피보나치 원소 연산
scala> import scala.math.{pow, sqrt}
import scala.math.{pow, sqrt}
scala> val phi = (sqrt(5)+1) / 2
phi: Double = 1.618033988749895
scala> def fibonacchiNumber(x: Int): Int =
| ((pow(phi,x) - pow(-phi, -x))/sqrt(5)).toInt
fibonacchiNumber: (x: Int)Int
scala> val integers = Stream.from(0)
integers: scala.collection.immutable.Stream[Int] = Stream(0, ?)
scala> integers.take(10).print
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, empty
scala> val fibonacciSequence = integers.map(fibonacchiNumber)
fibonacciSequence: scala.collection.immutable.Stream[Int] = Stream(0, ?)
scala> fibonacciSequence.take(8).print
0, 1, 1, 2, 3, 5, 8, 13, empty
scala>
- 비네 공식 (Binet formula) 를 이용하여 이전 요소를 구하지 않고 직접 계산