O que é realmente a recursão e explicar a saída deste programa? [fechadas]

Eu realmente não consigo entender esse código. Quando uma função chama a si mesma o que realmente acontece? Está relacionado ao conceito de stack, eu sei, mas ainda não consigo resolver essas questões.

#include<stdio.h>

fun(int);

main()
{
  int x=3;
  fun(x);
}

fun(int a) 
{
  if(a<0)
   {
     fun(--a);    // what happens when function calls itself
     printf("%d",a);
     fun(--a);
   }
} 

Por favor, explique a sequência de eventos que ocorrem durante este período.

questionAnswers(3)

yourAnswerToTheQuestion