@devrandom, as they say "to understand recursion, first, you have to understand recursion".
@efftoyz @devrandom It's honestly quite simple to understand when properly explained.
Or with trivial Scheme loops.
(let loop ((l '(4 3 2 1)))
(if (not (null? l))
(begin
(display (car l))
(newline)
(loop (cdr l)))))
Pascal just makes it harder because it doesn't mandate proper compilers (with TCO) afaik.
@devrandom @efftoyz That's mostly because recursion is at-best seen as a second-tier citizen in those languages, if not outright considered an anti-pattern.
Because it's easier to dislike useful abstractions like recursion than to mandate you can't take the lazy way out by writing your compiler with no support for them.
It enforces exactly the kind of verbosity or explicit stack management compilers are supposed to take care of for you with clean semantics.