Tail-recursive functinos are characterized as having nothing to do
during the unwinding phase. 

Stack usage is greatly reduces. 

When a compiler detects a call hat is tail recursice, it overwries the
current activation record instaed of pusing a new one onto the stack.




Basic recursiont use stack usage does have a few dwawbacks.
Maintaining information about every function call until it returns takes
a considerable amount of sapces. In addition, generating and destroying
activation records takes time becuase ther is a significant amount of 
information that must be saved and resored. 

Fortunately, we can use a special type of ecursion, calld tail
recursion, to avoid these concerns in some cases.



Signed-off-by: JH Baek <zirubak@gmail.com>