-module(factg).
-export([fg/2,compute/3]).

fg(G,N) ->
       spawn(factg,compute,[G,N,self()]),
       receive
          Result -> Result
       end.


compute(G,N,PIDfather) -> 
                  if 
                    (N==0) -> PIDfather!G(1);
                    true  ->  spawn(factg,compute,[G,N-1,self()]),
                            Res1 = G(N),
                            receive
                              Res2 -> PIDfather!(Res1 * Res2)
                            end
                  end.
 
