Skip to content

Instantly share code, notes, and snippets.

@edmore
Created September 28, 2011 19:51
Show Gist options
  • Save edmore/1249057 to your computer and use it in GitHub Desktop.
Save edmore/1249057 to your computer and use it in GitHub Desktop.
Direct Recursion
-module(direct_recursion).
-export([bump/1, average/1, sum/1, len/1, factorial/1, even/1, member/2, sum_boundary/1, sum_interval/2, reverse_create/1]).
% Add 1 to each value in a List, we could use list comprehensions of course but this is fun!!
bump([]) -> [];
bump([H|T]) -> [H + 1| bump(T)].
average([])-> 0;
average(List) -> sum(List)/len(List).
sum([])-> 0;
sum([H|T]) -> H + sum(T).
% for len we dont care about the H so we dont explicitly define it else we get an error :
% ./recursion.erl:13: Warning: variable 'H' is unused
len([])-> 0;
len([_|T])-> 1 + len(T).
% added a guard to "guard" against instances when the Value is negative
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N - 1).
even([]) -> [];
even([H|T]) when H rem 2 == 0 -> [H|even(T)];
%if its odd we dont care about it
even([_|T]) -> even(T).
member(_,[]) -> false;
member(H,[H|_]) -> true;
member(H,[_|T]) -> member(H,T).
% sum numbers up to a certain boundary
sum_boundary(1) -> 1;
sum_boundary(X) when X > 1 -> X + sum_boundary(X-1).
% sum numbers within a boundary N to M
sum_interval(N,N) -> N;
sum_interval(N,M) -> N + sum_interval(N+1, M).
% create a list when given maximum number in list i.e reverse_create(3) = [3,2,1]
reverse_create(1) -> [1];
reverse_create(X) when X > 1 -> [X | reverse_create(X-1)].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment