Los int tienen números de hasta 2.000.000 aproximadamente. El problema es que los números desbordan (15! es un número muy alto)
Puedes arreglarlo con:
long long factorial (int n){
long long factorial_n = 1;
Cambiando el retorno de factorial a long long (y la variable interna).
Si quieres, puedes poner unsigned long long, que tendrá el doble de capacidad que un long long.