Ejemplos de Recursividad. Calcular 2 elevado a n

Programa Java recursivo para calcular 2 elevado a n siendo n un número entero mayor o igual que 0.

La solución recursiva se basa en lo siguiente:

Caso Base:

si n = 0 entonces 2^0 = 1

Si n > 0  Podemos calcular 2^n  como  2 * 2^n-1

Por ejemplo: 2^5 = 2 * 2^4

El programa que calcula 2 elevado a n de forma recursiva puede quedar así:

//programa Java para calcular 2 elevado a n de forma recursiva
import java.util.Scanner;

public class Elevar2aNRecursivo {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int num;

        do{
           System.out.print("Introduce un numero entero >=0 ");
           num = sc.nextInt();
        }while(num < 0);

        System.out.println("2 ^ " + num + " = " + potencia(num));                                                 
    }

    //método recursivo para elevar 2 a n
    public static double potencia(int n){
           if(n == 0){   //caso base
              return 1;
           } else {
              return 2 * potencia(n-1);
           }
    }
}

La solución iterativa a este problema sería esta:

//programa Java para calcular 2 elevado a n de forma iterativa
import java.util.Scanner;

public class Potencia2N {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int num;

        do{
           System.out.print("Introduce un numero entero >=0 ");
           num = sc.nextInt();
        }while(num < 0);

        System.out.println("2 ^ " + num + " = " + potencia(num));                                                 
    }

    //método iterativo para elevar 2 a n
    public static double potencia(int n){
           double resultado = 1;
           for(int i = 1; i <= n; i++){
               resultado = resultado * 2;
           }
           return resultado;
    } 
}

Más ejemplos de recursividad

9 comentarios:

  1. Estoy estudiando programación y me han mandado un ejercicio de recursividad. El ejercicio me es imposible porque no acabo de entender la recursividad. El ejercicio es:
    Hacer un programa que descomponga en base 2 las potencias de un numero entrado por teclado. El programa nos ha de pedir un número positivo entero y nos ha de desglosar por potencias utilizando la recursividad. Tanto la base como el exponente, ha de ser positivo.

    O sea que cuando el programa te pregunte.
    Entra un numero: y por ejemplo ponga 33
    Nos de como resultado.
    El resultado es: 2^5+2^0

    ResponderEliminar
    Respuestas
    1. primero deberias ver si el numero ingresado por teclado es un entero y segundo ver si es par o impar.
      Luego es parecido al ejemplo que da aca con la diferencia q tenes q poner un contador por cada recursividad q se haga y el return q sea la variable del contador.
      Luego un "if" q verifique si el numero es par se muestra "2^" + (dato de la variable contador)" sino "2^" + (dato de la variable contador) + " + 2^0")

      Eliminar
  2. Me puedes dar algun consejo?

    ResponderEliminar
  3. Porque el problema es que no puedo usar otras operaciones matematicas que no sean las tipicas...

    ResponderEliminar
  4. public class Ejemplo3 {

    private int nn;
    private int res;

    public Ejemplo3(int nn) {
    this.nn=nn;
    //si es negativo multiplicamos por (-1)
    if (nn<0) {
    int aux = -1 * nn;
    potencia(aux);
    }else {
    potencia(nn);
    }
    mostrar();
    }
    //recursivo
    public int potencia(int n) {
    if (n == 0) {
    return res = 1;
    } else {
    return res = 2 * potencia(n - 1);
    }
    }

    public void mostrar() {
    if (nn < 0) {
    System.out.println("2^" + nn + "=1/" + res);
    } else {
    System.out.println("2^" + nn + "=" + res);
    }
    }

    public static void main(String[] args) {
    System.out.println("#####calculo de potencias");
    for (int i = 0; i < 10; i++) {
    Ejemplo3 e3=new Ejemplo3(i);
    }
    System.out.println("#####si la potencia es negativa");
    for (int i = -9; i <=0; i++) {
    Ejemplo3 e3=new Ejemplo3(i);
    }
    }
    }

    ResponderEliminar
  5. #####calculo de potencias
    2^0=1
    2^1=2
    2^2=4
    2^3=8
    2^4=16
    2^5=32
    2^6=64
    2^7=128
    2^8=256
    2^9=512
    #####si la potencia es negativa
    2^-9=1/512
    2^-8=1/256
    2^-7=1/128
    2^-6=1/64
    2^-5=1/32
    2^-4=1/16
    2^-3=1/8
    2^-2=1/4
    2^-1=1/2
    2^0=1

    ResponderEliminar
  6. YO LO ARREGLE YA WE
    import static javax.swing.JOptionPane.*;
    public class Ejemplo {

    private int nn;
    private int res;

    public Ejemplo(int nn) {
    this.nn=nn;
    //si es negativo multiplicamos por (-1)
    if (nn<0) {
    int aux = -1 * nn;
    potencia(aux);
    }else {
    potencia(nn);
    }
    mostrar();
    }
    //recursivo
    public int potencia(int n) {
    if (n == 0) {
    return res = 1;
    } else {
    return res = 2 * potencia(n - 1);
    }
    }

    public void mostrar() {
    if (nn < 0) {
    showMessageDialog(null,"2^" + nn + "=1/" + res);
    } else {
    showMessageDialog(null,"2^" + nn + "=" + res);
    }


    }


    public static void main(String[] args) {
    showMessageDialog(null,"calculo de potencias");
    for (int i = 0; i < 10; i++) {
    Ejemplo e3=new Ejemplo(i) ;
    }
    showMessageDialog(null,"si la potencia es negativa");
    for (int i = -9; i <= 0; i++) {
    Ejemplo e3= new Ejemplo(i);

    }
    }
    }

    ResponderEliminar
  7. yo tengo una cuestion a mi me piden el siguiente programa 1. HARAN UN PROGRAMA QUE SEA UN MENU QUE PERMITA TRES OPCIONES:
    1) LLAMAR A INTERNET (GOOGLE)
    2. LLAMARSE A SI MISMA (RECURSIVIDAD)
    3. SALIR

    Basicamente tengo todo hecho, pero me falta la opcion 2 llamarse a si misma.
    Que consejos me darian, debido a que me siento un poco confuso con este problema

    ResponderEliminar