DISCUSSION: In m4, recursion is more readable with ifelse, where the first argument of ifelse is the terminating condition. So, in my countDown macro, the fourth argument of ifelse is a
call to $0 with a nested eval() to subtract one from the argument and pass the result as the argument recursively. (The argument is also printed with a newline at each iteration).