Рекурсивный вызов "main ()" означает сброс программы? Если да, то почему вы не используете бесконечный цикл для проверки ввода, а затем в теле вы делаете факторные вычисления, выходные данные, такие как распечатки и т. Д., И завершаете программу, когда больше не нужны с определенным вводом. Я считаю, что это должно сработать:
do {
printf("Do you want to find a factorial? Y || y to continue");
scanf("%c", &ch);
printf("Enter the value of Number:");
scanf("%d", &num);
//Here you do your factorial number computation and error checks
} while (ch == 'y' || ch == 'Y');