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

//Calcular 2 elevado a n de forma recursiva

import java.util.*;
public class Elevar2aN {
    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));
    }
    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:

//Calcular 2 elevado a n de forma iterativa
import java.util.*;
public class Potencia2 {
    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));
    }
    public static double potencia(int n){
           double resultado=1;
           int i;
           for(i=1;i<=n;i++)
               resultado = resultado * 2;
           return resultado;
    } }

Más ejemplos de recursividad

7 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
  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