http://kor.i2p/books/The%20C%20Programming%20Language%20by%20K&R/chapter4.html
#include < stdio.h > /* printd: print n in decimal */
void printd(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10)
printd(n / 10);
putchar(n % 10 + '0');
} When a function calls itself recursively, each invocation gets a fresh set of
all the automatic variables, independent of the previous set. This in printd(123) the first printd receives the argument n = 123 .