Good work but one small comment :

Why having int and unsigned int?

Just for coherence, and avoiding compilers work:

Code:
/* Recursive Version */
unsigned int recursive_factorial(unsigned int n) 
{
    return n >= 1 ? n * recr_factorial(n-1) : 1;
}
Code:
/* Iterative Version */
unsigned int iter_factorial(unsigned int n) 
{
    unsigned int f = 1;
    for(unsigned int i = 1; i <= n; i++) 
    {
        f *= i;
    }
    return f;
}