Could someone please explain to me the difference between these three blocks of code?
#include <stdio.h>
void f(int a)
{
    printf("%d", a);
    if (a >= 1)
        f(--a);
    printf("%d", a);
}
int main()
{
    f(3);
    return 0;
}
Output: 32100012
#include <stdio.h>
void f(int a)
{
    printf("%d", a);
    if (a >= 1)
        f(a - 1);
    printf("%d", a);
}
int main()
{
    f(3);
    return 0;
}
Output: 32100123
#include <stdio.h>
void f(int a)
{
    printf("%d", a);
    if (a >= 1)
        f(a--);
    printf("%d", a);
}
int main()
{
    f(3);
    return 0;
}
Output: Infinite printing of the number 3
 
     
     
     
    