Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Xerelo en 17 de Marzo 2015, 19:22

Título: Qué es la recursividad# ¿Para qué sirve? Diferencia entre iteración y recursión
Publicado por: Xerelo en 17 de Marzo 2015, 19:22
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.
Título: Re:¿Que es la recursividad?
Publicado por: Mastermind 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.