&gt; I disagree. Recursion makes a stack trace that should be 10 functions deep into one that&#x27;s 1000 functions.<p>Recursion has nothing to do with stack traces.  Stack are one way to implement some version of recursion in functions.<p>Some other versions of recursion in functions can be implemented with loops.<p>And, of course, not only function can be recursive, but data structures as well.  (And a few other things.)  You can traverse these data structures any way you feel like.<p>&gt;  It&#x27;s difficult to debug and follow the code around, or even to understand the code if someone else wrote it.<p>I have that problem with loops (and mutation) much more than with recursion.  Different things make different people&#x27;s heads hurt.<p>&gt; Also recursive functions tend to spiral out of control and have ridiculous exponential run times.<p>Oh, that&#x27;s an artifact of how you&#x27;ve been taught (or self-taught).  Loops are a special case that only works well for simple tasks.  Recursion is more general and can express the simple case in a simple way.<p>Of course, if you only reach for recursion in the complicated cases, all uses of recursion you see will be complicated.  Simple observation bias.