euler/e002.erl
2011-09-23 22:33:38 -04:00

52 lines
1.3 KiB
Erlang

% Find the sum of all the even-valued terms in the Fibonacci sequence which do not exceed four million.
% 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, ...
% Find the sum of all the even-valued terms in the sequence which do not exceed four million.
-module(e002).
-export([
main/1,
fibonacci_max/1
]).
fibonacci_max(Max) ->
fibonacci_max_([], Max).
fibonacci_max_([], Max) ->
if
Max < 1 ->
[];
true ->
fibonacci_max_([1], Max)
end;
fibonacci_max_([N], Max) ->
Next = N + N,
if
Max < Next ->
[N];
true ->
fibonacci_max_([Next, N], Max)
end;
fibonacci_max_([N1, N2 | Seq], Max) ->
Next = N1 + N2,
if
Max < Next ->
[N1, N2 | Seq];
true ->
fibonacci_max_([Next, N1, N2 | Seq], Max)
end.
sum_if_even([]) ->
0;
sum_if_even([N | Seq]) ->
if
N rem 2 == 0 ->
N + sum_if_even(Seq);
true ->
sum_if_even(Seq)
end.
main(_) ->
Max = 4000000,
io:format("Sum for fibonacci <= ~w: ~w~n", [Max, sum_if_even(fibonacci_max(Max))]).