4 ms·
> tail call optimization is basically the compiler doing that conversion for you which removes the risks. Then can one argue that loops vs. recursion is mostly
by liotier 12y ago
> tail call optimization is basically the compiler doing that conversion for you which removes the risks.
Then can one argue that loops vs. recursion is mostly a matter of style and loops just as good as recursion since the compiler will optimize them that way anyway ?
- dspillett 12y agoYes, but only in the cases where the tail recursion optimisation is applicable. Recursive constructs are can be not tail recursive (and usually are with new starter developers) and many languages ignore it anyway (meaning even code that can be unpacked from function calls into a loop are not so the stack is still used).
- rubiquity 12y agoYes, but humans mess up loops far more frequently than compilers do. If we follow your argument recursively, we would all end up writing assembly language again, wouldn't we? :)
- coldtea 12y agoIs that meant as an argument against loops and pro recursion? Because humans also screw recursion all the time.
- rubiquity 12y agoI guess. But if I make the mistake of infinitely recursing I find out the next time I run my program. If I'm writing my own loops and make an off by one error it could go uncaught potentially forever.
- pekk 12y agoYou don't necessarily find out the next time you run your program. A stack overflow can go uncaught potentially forever.
- PaulHoule 12y agoOne of my favorite PHP gotchas is to accidentally write a function that calls itself infinitely, and then have the interpreter die without a warning message.
- Rusky 12y agoSo use iterators? Sometimes loops are just the clearer way to express something.
- mtdewcmu 12y agoIf a program is only doing a simple calculation and it's still running an hour later, you should probably suspect an infinite loop and not wait for it to stop.
- axman6 12y agoNot all recursive functions can be rewritten to be non-recursive. The Ackerman function is one such example. It's clearly tail recursive, but not only tail recursive so it must use some kind of stack or tree or something which isn;t linear like a loop. there's some explanation on the Computerphile youtube channel discussing it: https://www.youtube.com/watch?v=Mv9NEXX1VHc https://www.youtube.com/watch?v=Mv9NEXX1VHc