Advertisement
dev_filipe

fib.erl

May 16th, 2020
1,796
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 0.53 KB | None | 0 0
  1. -module(fib).
  2.  
  3. -export([fib/1]).
  4.  
  5. %% api
  6.  
  7. %% @doc generates the fibonacci sequence - a naïve solution
  8. -spec fib(N::pos_integer()) -> {pos_integer(), [pos_integer()]}.
  9. fib(0) ->
  10.   io:format("N must be greater than 0.\n");
  11. fib(N) ->
  12.   fib(0, N, []).
  13.  
  14. %% private
  15.  
  16. fib(C, N, Acc) when C == N ->
  17.   {hd(Acc), lists:reverse(Acc)};
  18. fib(C, N, Acc) ->
  19.   fib(C+1, N, f(C+1, Acc)).
  20.  
  21. %% helpers
  22.  
  23. f(0, _Acc) -> [];
  24. f(1, Acc) -> [0] ++ Acc;
  25. f(2, Acc) -> [1] ++ Acc;
  26. f(N, Acc) -> [lists:nth(1, Acc) + lists:nth(2, Acc)] ++ Acc.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement