In the context of the question being about recursion, it will print out "000" (I don't know why the answer shows 4 zeros because with '--i' decrement happens before assignment). If you unroll the calls you get:
if (--i) { //i == 3
if (--i) { //i == 2
if (--i) { //i == 1
if (--i) { //i == 0
// rest does not get evaluated since the condition is false
}
printf("%d", i); // i is 0 now
}
printf("%d", i); //i is still 0
}
printf("%d", i); //i is still 0
}
However like most have mentioned this code sucks and I would advise you never consider this level of sloppiness for any software you write.