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
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
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:
ResponderEliminarHacer 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
primero deberias ver si el numero ingresado por teclado es un entero y segundo ver si es par o impar.
EliminarLuego 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")
Me puedes dar algun consejo?
ResponderEliminarPorque el problema es que no puedo usar otras operaciones matematicas que no sean las tipicas...
ResponderEliminarsi n es negativo???
ResponderEliminarpublic class Ejemplo3 {
ResponderEliminarprivate 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);
}
}
}
#####calculo de potencias
ResponderEliminar2^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
YO LO ARREGLE YA WE
ResponderEliminarimport 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);
}
}
}
yo tengo una cuestion a mi me piden el siguiente programa 1. HARAN UN PROGRAMA QUE SEA UN MENU QUE PERMITA TRES OPCIONES:
ResponderEliminar1) 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