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
-
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í:
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:
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.
-
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:
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.