No se puede devolver el valor correcto de una variable en una función recursiva

Estoy haciendo el siguiente programa para encontrar factorial de un número dado de forma recursiva.

#include<stdio.h>
int fact1=1;

int recursion(int x)
{
    if(x==0)
    {
        return fact1;
    }

    fact1=fact1*x;
    x--;
    recursion(x);   
}

int main()
{
    printf("%d",recursion(5));
    return (0); 
}

Problema:

El problema es que cada vez que ejecuto este programa siempre me da un valor de basura 22752240.

Por lo tanto, para probar mi recursión, coloquéprintf("%d",fact1) en la función recursiva para verificar sifact1 era 120 antes de ser devuelto

int recursion(int x)
{
    if(x==0)
    {
        printf("%d",fact1);
        return fact1;
    }

    fact1=fact1*x;
    x--;
    recursion(x);   
}

y cuando ejecuté el programa obtuve este 120 22752240 como salida, lo que significa querecursion() estaba imprimiendo el valor correcto defact1 pero no pudo devolver el valor correcto defact1.

¿Alguien puede explicar por qué está sucediendo esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta