Não é possível retornar o valor correto de uma variável em uma função recursiva

Estou fazendo o seguinte programa para encontrar o fatorial de um determinado número recursivamente.

#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:

O problema é que sempre que executo esse programa, ele sempre me fornece um valor de lixo 22752240.

Assim, para testar minha recursão, coloqueiprintf("%d",fact1) na função recursiva para verificar sefact1 era 120 antes de ser devolvido

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

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

e quando executei o programa, obtive este 120 22752240 como saída, o que significa querecursion() estava imprimindo o valor correto defact1 mas não conseguiu retornar o valor correto defact1.

Alguém pode explicar por que isso está acontecendo?

questionAnswers(4)

yourAnswerToTheQuestion