10 - Factorial de un Número Mediante Recursividad (EDDJava)
Вставка
- Опубліковано 14 гру 2024
- / masterhehegar
/ masterhehegar
Si no puedes comentar aquí, hazlo en twitter o en facebook...
Bienvenid@s al Décimo VideoTutorial de la serie "Estructuras De Datos Con Java", hoy abordamos el tema "Factorial de un Número Mediante Recursividad", ojalá y les sea de muchísima utilidad. Comenten, suscríbanse y ya saben si les gusta denle clic a la manita...Quedamos más que al Millonazo...
Muy claro el video, solo un comentario sobre el metodo recursivo. No es necesario hacer los else cuando queremos controlar el caso base ya que la idea es retornar y cortar la recursividad.
public static int factorialRecursivo(int n) {
if(n < 0) {
return 0;
}
if(n == 0) {
return 1;
}
//Dominio (problema -1 )
return n * factorialRecursivo(n -1 );
}
Ay mi madre pero que hermosa lógica la del método con recursividad, no se me habría ocurrido, he hecho ese ejercicio varias veces pero con ciclos
Que forma de explicar ¡¡... Excelente
Muchas gracias me sirvio de mucho!!!
Hola, y como harias para que la salida sea por ejemplo 4! = 1 * 2 *3 *4 = 24
Que tal Profesor MasterHeHeGar en la recursividad de un método dentro de otro método en donde se va guardando el acumulado de la multiplicación n * n-1
saludos.
Podrias subir el codigo fuente
very good!
7:52 no me sale esa parte
Me quedaron dudas: con la recursividad el método va quedándose con el resultado de memoria sin tener que guardarlo en una variable?? Es decir,,,retorna la multiplicacion de el (n) * (el factorial de n - 1),,, ¿pero como rayos sabe cual es el factorial de n - 1? No entiendo :/
esa fue mi duda tambien si pueden responderla me ayudaria
Lo que pasa es que va acumulando las llamadas al metodo como en una pila, osea que hasta que el llega al caso base, de ahi para arriba va ejecutando todas las llamadas recurrentes al metodo. Es decir, el metodo nunca guarda el acumulado en si, solamente retorna el valor de la multiplicacion y es ese valor que se pasa de ahi para arriba en la otras llamadas al metodo, osea por ejemplo cuando llega a n == 0, el metodo retorna 1, luego ese valor 1 se introduce como parametro en la llamada anterior del metodo, ahora se multiplica por 1 x loQueRetornoElMedodo que es 1, osea 1 x 1, luego el resultado se devuelve en parametro a la otra llamada que es 2 * loQueRetornaElMetodo que ahora es 1, osea 2 x 1, asi sucesivamente se devuelve el valor para arriba hasta terminar en la primera llamada que hubo que era del 4 * factorial(4-1) que ahi el metodo retornaria el valor respectivo osea 6 y lo multiplica por el 4.
@@davidcol0125 Esta logica asusta, lo comprobe coml dices y me enrollo bastante pero es lógico, no me hubiera imaginado que funcione de esa manera.
Muchas gracias colega de seguro eres un gran programador ahora.
@@sociedaddeagua5040 Ya ha pasado algo de tiempo pero por ejemplo factorial de 5 con recursividad java lo hace de esta manera:
5*(4*(3*(2*(1*1))))
5*(4*(3*(2*1)))
5*(4*(3*2))
5*(4*6)
5*24
120
Aquí mi aporte por si alguien llega a tener dudas o quisiera pedir los datos al usuario.
import javax.swing.JOptionPane;
public class Principal {
public static void main(String[] args) {
// Ejemplo de fatcorial de un número
// 4!=1*2*3*4=24
Principal Recursividad=new Principal(); // creo un objeto
Principal Recursividad1=new Principal(); //creo un segundo objeto para la segunda forma de impresión
int num=(Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese n número")));
//creo una variable que almacena el número que quiero encontrar su factorial
JOptionPane.showMessageDialog(null, "El factorial del número "+num +" es "+Recursividad.factorialRecursivo(num));
//muestro el resultado de el método factorialRecursivo
System.out.println("
"); //salto de linea
System.out.println("El factorial de 5 es "+Recursividad1.factorialRecursivo(5));
//muestro el resultado del factorial asignandole un valor por defecto
}
//Creación del método factorial de forma recursiva
public int factorialRecursivo(int n){ // creación del método factorial recursivo que recibe parametros de tipo entero n
if(n