elrincondelc.com
Inicio :: Foros
Usuario: Clave: Regístrate
Salir


como sacar el factorial de un numero

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Alphabravo



Registrado: 02 Jun 2005
Mensajes: 36

MensajePublicado: 08/06/2005 11:59 am Responder citando
Título: como sacar el factorial de un numero

como sacar el factorial d eun numero?
Volver arriba
Ver perfil del usuario Enviar mensaje privado
pitukilloloco



Registrado: 11 May 2005
Mensajes: 442

MensajePublicado: 08/06/2005 12:15 pm Responder citando
Título:

Puedes hacerlo por medio de una función recursiva. Una manera sería
Código:

unsigned long int factorial (unsigned long int n)
{
   if (n < 1)
      return 1;
   else
      return n * factorial (n - 1);
}

claro que esta función pronto desborda al tipo unsigned long int y quizá sería mejor emplear el tipo long double que tiene más presición y usar la fórmula de Steerling para aproximar al factorial por medio de logaritmos.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Alphabravo



Registrado: 02 Jun 2005
Mensajes: 36

MensajePublicado: 08/06/2005 12:17 pm Responder citando
Título:

gracias
Volver arriba
Ver perfil del usuario Enviar mensaje privado
vile



Registrado: 13 Abr 2005
Mensajes: 11
Ubicación: IQUIQUE - chile

MensajePublicado: 03/07/2005 7:55 am Responder citando
Título:

ese mismo iba a ponerlo yo XD
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
anticuado



Registrado: 12 Jun 2005
Mensajes: 21

MensajePublicado: 07/07/2005 3:46 am Responder citando
Título:

yo, por comentarlo, decir que las funciones recursivas son la peste (en coste computacional). Un truco que nos comentaron en la carrera, es este:
supongamos que tenemos el limite maximo de los int 2147483647. entonces, calculamos todos los factoriales que se encuentren en el limite (con un sencillo bucle y (por ejemplo) los guardamos en un archivo (por facilidad) o en un array de enteros.

int t=1;

while (t<2147483647&&t>0) //el 0 se pone por si nos pasamos de vueltas.
{
t = t*(t+1)
printf(t);
}
return array[n];

y luego solo tenemos que buscar el numero del que queremos el factorial en el array. Tiempo de ejecucion = orden 1.
en el caso de la recursividad, era una barbaridad...
la verdad es que si tienes que ejecutarlo muuuchas veces (por ejemplo, en un juego, una vez por frame) es mejor esta forma que la recursiva(vamos, mil veces mejor).
saludos y espero que a alguien le sirva.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1 Todas las horas están en GMT - 8 Horas

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com, 1999-2007

Un proyecto de UrlanHeat.com