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;
}