Foros del Web » Programación para mayores de 30 ;) » Java »

potencia por recursion no entiendo!

Estas en el tema de potencia por recursion no entiendo! en el foro de Java en Foros del Web. hola me ayudan a entender que es lo que sucede.. aqui... Código PHP:   /* Ejemplo - aprenderaprogramar.com */ //Clase que permite elevar un número entero m a otro número entero n y obtener un resultado public class  Exponenciador  { //Constructor       public  Exponenciador  () {          ...
  #1 (permalink)  
Antiguo 18/03/2014, 14:56
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 2 meses
Puntos: 3
potencia por recursion no entiendo!

hola me ayudan a entender que es lo que sucede.. aqui...


Código PHP:

 
/* Ejemplo - aprenderaprogramar.com */

//Clase que permite elevar un número entero m a otro número entero n y obtener un resultado

public class Exponenciador {

//Constructor

     
public Exponenciador () {

        
//Nada que declarar

    
}

    
//Método 1 para calcular la potencia

    
public int potenciaIterando (int mint n) {

        
int resultado 1;

        for (
int i=1i<=ni++) {

            
resultado resultado m;           

        }

        return 
resultado;

    } 
//Cierre del método

    //Método 2 para calcular la potencia

    
public int potenciaConRecursion (int mint n) {

        if (
n==0) { return 1;

        } else  { return 
potenciaConRecursion (mn-1); }

    } 
//Cierre del método

//Cierre de la clase 
no entiendo cuando usa este metodo "potenciaConRecursion" es un poco confuso..
supongamos que los parametros son 2 y 3
claramente el resultado da 8.
entra primero por el ELSE, como el n no es cero es "3"
y devuelve... 2 x ?

llama de nuevo al metodo con potenciaConRecursion (2, 2)...no?
  #2 (permalink)  
Antiguo 18/03/2014, 17:58
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: potencia por recursion no entiendo!

Cita:
Iniciado por aldo_rengo Ver Mensaje
hola me ayudan a entender que es lo que sucede.. aqui...


Código PHP:

 
/* Ejemplo - aprenderaprogramar.com */

//Clase que permite elevar un número entero m a otro número entero n y obtener un resultado

public class Exponenciador {

//Constructor

     
public Exponenciador () {

        
//Nada que declarar

    
}

    
//Método 1 para calcular la potencia

    
public int potenciaIterando (int mint n) {

        
int resultado 1;

        for (
int i=1i<=ni++) {

            
resultado resultado m;           

        }

        return 
resultado;

    } 
//Cierre del método

    //Método 2 para calcular la potencia

    
public int potenciaConRecursion (int mint n) {

        if (
n==0) { return 1;

        } else  { return 
potenciaConRecursion (mn-1); }

    } 
//Cierre del método

//Cierre de la clase 
no entiendo cuando usa este metodo "potenciaConRecursion" es un poco confuso..
supongamos que los parametros son 2 y 3
claramente el resultado da 8.
entra primero por el ELSE, como el n no es cero es "3"
y devuelve... 2 x ?

llama de nuevo al metodo con potenciaConRecursion (2, 2)...no?
Exacto, llama de nuevo al método con potenciaConRecursion(2, 2), de eso trata la recursividad.
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

No es muy necesario en este caso, te recomiendo revisar la Sucesión de Fibonacci y el código recursivo para calcular un término de esa sucesión. Ahí lo verás más claro y más útil.
  #3 (permalink)  
Antiguo 19/03/2014, 08:41
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 2 meses
Puntos: 3
Respuesta: potencia por recursion no entiendo!

no se me cuesta entender....

en la primer entrada.

entra con base 2 exponente 3.

como el exponente es 3 ,- como n es "3"-


entra por el ELSE,

y ahi devuelve una multiplicacion

2 x ( una funcion poteinciaconRecursion(2,2))

osea que valor tendra esa funcion...

osea como retorna 8 si la ultima vez "N es 0"
  #4 (permalink)  
Antiguo 19/03/2014, 09:39
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: potencia por recursion no entiendo!

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

Paso 2:
La JVM "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:
La JVM "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:
La JVM "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:
La JVM 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.
  #5 (permalink)  
Antiguo 19/03/2014, 11:12
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 2 meses
Puntos: 3
Respuesta: potencia por recursion no entiendo!

mm si..

con esto ya lo entendi... 2 ^3

Código PHP:


(2,2)   ?  8
(2,1)  ? 
(2,0)  

Etiquetas: clase, metodo, potencia, programa, recursion
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 16:45.