-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathone_21.erl
35 lines (29 loc) · 845 Bytes
/
one_21.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-module(one_21).
-export([fib / 1, newFib / 1]).
% from lesson 1.20 ("is exponentially complex … ouch!")
fib(0) -> 0;
fib(1) -> 1;
fib(N) -> fib(N - 2) + fib(N - 1).
% "Define an efficient Fibonacci function fib/3 using
% a tail recursion with two accumulating parameters
% that hold the last two Fibonacci numbers."
% I got this bit right!
newFib(N) ->
newFib(N, 0, 1).
%newFib(N, Penultimate, Last) -> when N = 1
% 0;
%newFib(N, Penultimate, Last) -> when N = 2
% 1;
%newFib(N, Penultimate, Last) -> when N > 2
% newFib(N - 1, )
%newFib(N, Penultimate, Last) -> when N = 1
% 0;
%newFib(N, Penultimate, Last) -> when N = 2
% 1;
%newFib(N, Penultimate, Last) -> when N > 2
% newFib(N - 1, )
% from 1.22 lesson video
newFib(0, Previous, _Current) ->
Previous;
newFib(N, Previous, Current) ->
newFib(N - 1, Current, Previous + Current).