by July 17, 2012
onThere you go, the second problem of Project Euler:
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
class Euler002 extends Euler {
def number = 2
def solution = {
lazy val sequence = {
def build(i : Int, j : Int) : Stream[Int] = i #:: build(j, i+j)
build(1, 2)
}
val fibs = for (elem <- sequence.iterator if elem % 2 == 0) yield elem
fibs.takeWhile(_ <= 4000000).sum
}
}
This solution uses a lazily evaluated sequence (Stream
) where each element is computed as it is requested.