Копаем код в оллеdbg - видим умножение происходит со знаком - IMUL.
Проверка с использованием Ассемблера - открываем 35 страницу Зубкова С.В. "Assembler для DOS, Windows и UNIX" 
Написано - если происходит переполнение, то флаги OF и CF будут равны "1" проверяется последовательно двумя командами сравнения соответствующих флагов указанных выше
 jc и 
jo.
Делаем после кода умножение (*z) проверочку с помощью ассемблерной вставочки.
Код:
            buff=(FunctionRecurFacktorial(z-1)*z);
            _asm
            {
           jc OverProb;
           jmp L1
OverProb:jo OverYES
           jmp ExitLabel
    
OverYES:  mov eax,-1
           mov zz,-1
ExitLabel:
            }
            if(zz==0)rez=buff;
            else {rez=0;printf("OVERflov");}
Вот полный код программки для вычисления факториала, где задается верхняя граница, код сырой, я баловался с рекурсией
Код:
#include <stdio.h>
//#include<cmath>
main ()
{
   unsigned int FaK(int z);
   int x,i=-6;
   printf("vvedite verch gran:");
   scanf("%d",&x);
   while (i<=x)
   {
      printf("%4d! =  %d\n",i, FaK(i));
      i++;
   }
}
unsigned FaK(int z)
{
   unsigned int rez=999,zz=0,buff;
   if (z<0)
   {
      printf("ErroR");
      rez=-1;
   }
   if (0==z) rez=1;
   if (z>0)
   {
            
            buff=(FaK(z-1)*z);
            _asm
            {
    jc Lok;
    jmp L1
lok: jo Lok2
    jmp L1
    
Lok2:mov eax,-1
    mov zz,-1
L1:
            }
            if(zz==0)rez=buff;
            else {rez=0;printf("OVERflov");}
   }
   return rez;
}
для 
контроля корректности результатов - При вычислении более 12 итераций происходит переполнение