[erlang-questions] System getting hang after running normal recursion program

Arun arunp@REDACTED
Sat Oct 7 14:14:00 CEST 2017


Hi Leandro,

Am aware about tail recursion in erlang, but here I am talking about 
recursion which is not tail recursive. Here is the code snippet;

start(N) ->
     N*start(N-1).

Here the function is not tail recursive and it is in an infinite loop. 
If run this function my system is getting hang. That why i got the doubt 
why it is making my system to hang and how the erlang scheduler will 
behave in this scenario.?

Regards,
Arun P.


On Saturday 07 October 2017 04:07 PM, Leandro Ostera wrote:
> Hej Arun, hi.
>
> Depending on your recursion, you may or may not be building up a stack 
> that will at some point crash. I am unsure about how C compilers 
> typically deal with tail-recursion, but tail call optimization is 
> automatically performed in the Erlang VM for you.
>
> From the Learn You Some Erlang book chapter on Recursion 
> (http://learnyousomeerlang.com/recursion):
>
> *Note:* tail recursion as seen here is not making the memory grow 
> because when the virtual machine sees a function calling itself in a 
> tail position (the last expression to be evaluated in a function), it 
> eliminates the current stack frame. This is called tail-call 
> optimisation (TCO) and it is a special case of a more general 
> optimisation named /Last Call Optimisation/ (LCO).
>
> LCO is done whenever the last expression to be evaluated in a function 
> body is another function call. When that happens, as with TCO, the 
> Erlang VM avoids storing the stack frame. As such tail recursion is 
> also possible between multiple functions. As an example, the chain of 
> functions |a() -> b(). b() -> c(). c() -> a().| will effectively 
> create an infinite loop that won't go out of memory as LCO avoids 
> overflowing the stack. This principle, combined with our use of 
> accumulators is what makes tail recursion useful.
>
>
> Hope this helps!
>
> On Sat, Oct 7, 2017 at 9:03 AM Arun <arunp@REDACTED 
> <mailto:arunp@REDACTED>> wrote:
>
>     Hi all,
>
>     I tried to run normal recursion program from erlang shell, the program
>     runs infinitely and it is doing addition of numbers. But its been
>     observed that soon after starting the program entire PC is getting
>     hang.
>
>     My doubt is that, why my PC is getting hang. ? , if something is going
>     wrong, the erlang vm should be able to handle it, like in C if we run
>     some recursion program infinity, it will crash by throwing
>     segmentation
>     fault error.
>
>     What will be happening in the VM if I run a normal recursion
>     program in
>     erlang infinitely ?
>
>     What will be the behavior of erlang scheduler in this scenario ?
>
>     Can somebody please assist me on this issue.
>
>     Thanks in advance
>     Arun P.
>     _______________________________________________
>     erlang-questions mailing list
>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>     http://erlang.org/mailman/listinfo/erlang-questions
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20171007/fcdd212e/attachment.htm>


More information about the erlang-questions mailing list