tail recursion question

Doug Edmunds (gmail) <>
Tue Apr 27 22:50:48 CEST 2010


In this example module, loop1 is tail recursive, but
are loop2 and loop3 equally tail recursive?
or do loop2 and loop3 leave something on the stack?

Thanks.
--dae--

-module(loops).
-compile(export_all).

start() ->
     register(loop1, spawn(?MODULE, loop1,[10])),
     register(loop2, spawn(?MODULE, loop2,[10])),
     register(loop3, spawn(?MODULE, loop3,[10])).

loop1(State) ->
     io:format("loop1:~p~n",[State]),
     receive
         a ->
             State2 = State - 1;
         b ->
             State2 = State + 1;
         _ ->
             State2 = State
     end,
     loop1(State2).


loop2(State) ->
     io:format("loop2:~p~n",[State]),
     receive
         a ->
             State2 = State - 1 ,
             loop2(State2);
         b ->
             State2 = State + 1 ,
             loop2(State2);
         _ ->
             State2 = State,
             loop2(State2)
   end.

loop3(State) ->
     io:format("loop3:~p~n",[State]),
     receive
         a ->
             State2 = State - 1 ,
             loop3(State2);
         b ->
             State2 = State + 1 ,
             loop3(State2);
         _ ->
             State2 = State,
             loop3(State2)
     end,
     never_reach_this().

never_reach_this() ->
     io:format("Am I tail recursive or not?").


More information about the erlang-questions mailing list