No entiendo muy bien la pregunta.
El resultado de factorial() es erroneo para valores de num>25 ya que el tipo int (y en la mayoría de los casos long tiene el mismo tamaño que simplemente int) no tiene suficiente capacidad para guardar el valor del factorial de 26.
esto me parece innecesario ya que solo aceptas números mayores de 0, por lo que abs no hace nada ahí.