Autor Tema: ¿Que es la recursividad? ¿Para qué sirve? Diferencia entre iteración y recursión  (Leído 3766 veces)

Xerelo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Bueno gente, antes que nada muchas gracias por la ayuda en los anteriores problemas, estoy agradecido que pierdan minutos de su vida en mi.

Ahora pasando a un tema que me esta volviendo loco jejeje..

Es la primera vez que veo recursividad y yo solo pensaba que solo repetía código un bucle.

Pero veo que no...

Entonces esto me mosquea mucho... :asco:

A ver un método recursivo es hacer un ejercicio mas chico, hasta llegar a la base?

Por ejemplo el factorial de un número

3! = 3 * 3 * 3

Con un bucle for lo haría así:

Código: [Seleccionar]
Public int GetFactorialConCiclo(int n){
int acomulado = 1;
for(int i = n; i >= 1;i--){
acomulado * = 1;
}
return acumulado;

}


Pero no sabía yo que se podía hacer esto sin usar un solo bucle, solamente un método y llamandolo en el método princiapal :stress:


Que sería asi:

Código: [Seleccionar]
public int GetFactorialRecursivo(int n){
if(n == 0){
return 1;
}
else{
return n * GetFactorialRecursivo(n-1);
}
}

El segundo es mas limpio, pero tengo muchas dudas

No entiendo la recursividad, tampoco entiendo por que el bucle actúa como un bucle,tampoco entiendo como sabe el mismo método que tiene que llegar hasta el final del numero factorial...

Si me lo explicas te estaré agradecido, si vas a poner un enlace a otra dirección web, porfavor que sea en español

Gracias.
« Última modificación: 23 de Marzo 2015, 08:45 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
Re:¿Que es la recursividad?
« Respuesta #1 en: 17 de Marzo 2015, 21:43 »
Hola aquí el enlace: https://www.aprenderaprogramar.com/foros/index.php?topic=1493

Aquí una explicación sobre el factorial recursivo que puede ser útil:

Citar
Viéndolo matemáticamente, para calcular 2³ el método potenciaConRecursión lo haría así:
Primero el método va entrando recursivamente hasta obtener un valor:
2³ = 2 x 2²
2² = 2 x 2¹
2¹ = 2 x 2⁰
2⁰ = 1

y luego "sale", a partir del valor encontrado (2⁰ = 1), y lo utiliza recursivamente:

-> 2¹ = 2 x 2⁰ = 2 x 1 = 2
-> 2² = 2 x 2¹ = 2 x 2 = 4
-> 2³ = 2 x 2² = 2 x 4 = 8

Calcular potenciaConRecursion(2,3)
Paso 1:
¿Es n es igual a 0 ? No, n es 3. Entonces retorna 2 * potenciaConRecursion(2,2).

Paso 2:
El compilador o programa "deja esperando" a calcularPotenciaConRecursion(2,3) y ahora se dedica a calcular potenciaConRecursion(2,2)
¿Es n es igual a 0 ? No, n es 2. Entonces retorna 2 * potenciaConRecursion(2,1).

Paso 3:
El compilador o programa "deja esperando" a calcularPotenciaConRecursion(2,2) y ahora se dedica a calcular potenciaConRecursion(2,1)
¿Es n es igual a 0 ? No, n es 1. Entonces retorna 2 * potenciaConRecursion(2,0).

Paso 4:
El compilador o programa "deja esperando" a calcularPotenciaConRecursion(2,1) y ahora se dedica a calcular potenciaConRecursion(2,0)
¿Es n es igual a 0 ? Sí, n es 1. Entonces retorna 1.

Paso 5:
El compilador o programa vuelve a los métodos que dejó "esperando" empezando por el último
Primero vuelve a calcularPotenciaConRecursion(2,1) y retorna 2 * potenciaConRecursion(2,0) = 2 * 1 = 2.

Paso 6:
Luego vuelve a calcularPotenciaConRecursion(2,2) y retorna 2 * calcularPotenciaConRecursion(2,1) = 2 * 2 = 4.

Paso 7:
Finalmente vuelve a calcularPotenciaConRecursion(2,3) y retorna 2 * calcularPotenciaConRecursion(2,2) = 2 * 4 = 8.

FIN.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".