Foros del Web » Programación para mayores de 30 ;) » C/C++ »

recursividad?

Estas en el tema de recursividad? en el foro de C/C++ en Foros del Web. Saludos me estoy iniciando en esto de la programacion,me parece que es algo muy interesante pero un poco confuso, lo que trato de hacer es ...
  #1 (permalink)  
Antiguo 13/06/2007, 23:27
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 10 meses
Puntos: 0
recursividad?

Saludos

me estoy iniciando en esto de la programacion,me parece que es algo muy interesante pero un poco confuso, lo que trato de hacer es analizar como se va haciendo cada cosa, como funciona para asi tener unas buenas bases, un buen analisis y tratar de mejorar mi logica.

Pero hay Terminos o propiedades que no me quedan muy claras como la RECURSIVIDAD y quisiera que me lo explicaran por favor en este pequeños programa.

//program de factorial de 10 numeros

int factorial(unsigned long int);

int main()
{
int contador;
int resultado;

for (contador = 0;contador <=10; contador ++)
{
resultado = factorial(contador);
cout << contador << " ! = " << resultado << endl;
}
system("pause");
return 0;
}

int factorial(unsigned long int numero)
{
//metodo base
if(numero<=1)
return 1;

else
return numero * factorial (numero - 1);
}

Lo que quiero saber es como se va ejecutando

return numero * factorial (numero -1)

y que valores va tomando o como los convina o los multiplica.

*********************************************
Mi teoria es esta supongamos q el for va en 4 numero=4
por orden de operadores ejecuta primero lo que esta entre parentesis y esto quedaria 4 * factorial (4 - 1) ¿vuelve a llamar a factorial? y despues q haci se va hasta llegar a uno, y como es q arroja el resultado al final?

gracias espero alguien pueda ayudarme y explicarme con calma.
  #2 (permalink)  
Antiguo 14/06/2007, 02:36
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: recursividad?

por definicion el factorial de un numero se calcula asi

n!=n*(n-1)!, es decir 3!=3*2! y 2!=2*1!, 1!=1*0! y 0! por definicion es 1, pero en el programa solo te llega a 1!=1

Entonces, para calcular el factorial de un numero n tienes que ir calculando todos los n-1, por eso se usa la recursividad. Esta para cuando llegas a 1, y todos los numeros anteriores ya los has ido devolviendo.

Ten en cuenta que cuando llams a una funcion, cuando esta regresa lo hara en el punto donde hiciste la llamada, en este caso en el return.

Espero que me hayas entendido
  #3 (permalink)  
Antiguo 14/06/2007, 05:59
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: recursividad?

Cita:
...Mi teoria es esta supongamos q el for va en 4 numero=4
por orden de operadores ejecuta primero lo que esta entre parentesis y esto quedaria 4 * factorial (4 - 1) ¿vuelve a llamar a factorial? y despues q haci se va hasta llegar a uno, y como es q arroja el resultado al final?...
Se ejecuta tal como dices. Fíjate que eventualmente llega a "2*factorial(1)" en ese punto retorna 1 y ya todos los valores están definidos, así que los evalúa y finaliza la ejecución de factorial.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #4 (permalink)  
Antiguo 14/06/2007, 17:26
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: recursividad?

Salu2

Lo que entendi fue esto.

espero este bien

Osea q una funcion recursiva se va decrementando para obtener el problema anterior e ir arrojando reultados hasta arrojar el resultado deseado.

gracias por su paciencia
  #5 (permalink)  
Antiguo 14/06/2007, 21:06
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: recursividad?

quizas esas no son las palabras mas apropiadas, pero se podria decir que si. Solo que cambiaria "decrementando" por "procesando" o algo asi, en realidad no se me ocurre una buena palabra sustituta en estos momentos jeje.

Por cierto, ya que al parecer estas aprendiendo de una buena forma, seria muy interesante que aprendieras a analizar la complejidad de los algoritmos, es decir, si corren en o(n) o(n2) , etc...

Se que para algunos algoritmos es muy muy dificil de hacerlo, pero seria magnifico que tuvieras una idea de como podria correr tu algoritmo. Podrias empezar por analizar el del factorial. Esto es un tema de suma importancia en la programacion, que muchos no toman en cuenta.

saludos,
  #6 (permalink)  
Antiguo 14/06/2007, 22:45
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: recursividad?

La recursividad no es la mejor forma de resolver problemas en un lenguaje como C o C++. Aun asi, siempre es bueno saber que existe esa propiedad.

En realidad es muy sencillo.

tienes el factorial de 4( 4! ).

entonces, como te dicen.

4*3! que es -> return numero*factorial(numero-1)

Como veras, se vuelve a llamar a la funcion factorial, pero esta vez tiene 3 en ez de 4, por lo que queda.

3*2! return numero*factorial(numero-1)
Lo mismo.
2*1!

cuando numero es 1, ya no se llama a la funcion factorial, en su lugar solo devuelve uno.

if(numero<=1)
return 1;

Entonces ya tenemos el primer valor y se sale de la ultima funcion factorial y el uno devuelto se multiplica por el 2 y luego el valor devuelto se multimplicapor 3 y en la primera funcion llamada, por 4. Y finalmente sale del "ciclo".

Imaginatelo como un ciclo:

Cita:
int numero, factorial=1;
for(numero=4; numero >=1; numero--)
{
factorial=factorial*numero;
}
Creo que este codigo es mucho mas legible que al usar recursividad, y aparte digamos que ahorras algo de pila(stack). Jjejeje. Imaginate el factorial de 100?

Saludos
  #7 (permalink)  
Antiguo 15/06/2007, 12:34
 
Fecha de Ingreso: febrero-2006
Mensajes: 49
Antigüedad: 18 años, 2 meses
Puntos: 1
Re: recursividad?

Buenasss

Como bien te comenta Instru, en este caso es mucho mas ineficiente utilizar recursividad, pero por ejemplo en el ejercicio de las torres de Hanoi la recursividad es lo mas adecuado y en algunos casos mas avanzados es una buena opcion tambien

Saludos
  #8 (permalink)  
Antiguo 15/06/2007, 16:29
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: recursividad?

yo es que pienso que esto es un ejercicio de clase, ya que a mi tambien me toco hacerlo y solo se usa para entender la recursividad en si y ver que hay otras opciones de hacer las cosas, aunque en este caso en verdad que es ineficiente. Yo por ejemplo use la recursividad en algoritmos de ordenar y en el backtracking.
  #9 (permalink)  
Antiguo 17/06/2007, 12:14
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Re: recursividad?

Recursividad:
Significa reutilizar (o llamas) el mismo codigo ya hecho, eso es recursividad.
  #10 (permalink)  
Antiguo 17/06/2007, 15:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: recursividad?

Cita:
Iniciado por razpeitia Ver Mensaje
Recursividad:
Significa reutilizar (o llamas) el mismo codigo ya hecho, eso es recursividad.
¿De verdad?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 18/06/2007, 12:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Re: recursividad?

Cita:
Iniciado por Eternal Idol
¿De verdad?
si, claro ahi definiciones mas completas pero no las mencionare.
  #12 (permalink)  
Antiguo 18/06/2007, 12:16
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: recursividad?

Cita:
Iniciado por razpeitia Ver Mensaje
si, claro ahi definiciones mas completas pero no las mencionare.
¿Es que alguien pidio alguna definicion acaso?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #13 (permalink)  
Antiguo 19/06/2007, 10:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Re: recursividad?

Cita:
Iniciado por Eternal Idol Ver Mensaje
¿Es que alguien pidio alguna definicion acaso?
Alguien te pido que hablaras? ¬¬
  #14 (permalink)  
Antiguo 19/06/2007, 11:45
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: recursividad?

Cita:
Iniciado por razpeitia Ver Mensaje
Alguien te pido que hablaras? ¬¬
No me hace falta, con ver una respuesta fuera de lugar es suficiente.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #15 (permalink)  
Antiguo 21/06/2007, 13:00
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: recursividad?

En primer lugar quiero agradecer a todos por la ayuda y por su paciencia, esto para mi ya ah quedado claro y tomare encuenta el consejo de no ultilizar mucho la racursividad, pero si entenderla bien.

Gracias.

Me parecio interesante eso de los ALGORITMOS (n), (n2).
Voy a buscar informacion para entenderlos mas.
  #16 (permalink)  
Antiguo 24/06/2007, 18:43
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: recursividad?

si te interesa, en este link puedes ver una especie de minirepaso de los tipos de algoritmo...
http://megabyter.org/modules/section...ticle&artid=19

saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:06.