In the below mentioned code i am having a difficulty to understand the logic behind it.

Code:
#include <stdio.h>

void call(int n )
{
if ( n < 0 )
{
call(--n) ;
printf("\n%d",n) ;
call(--n) ;
}
}

int main(void )
{
int a = 3;
call(3) ;
return 0 ;
}
The output of the code is 0 1 2 0. Why?