Ejercicio 1
Programe un método recursivo que transforme un número expresado en notación binaria a un número entero.
//CODIGO DE SOLUCION:
//JEAN MARCO OLIVCARES GUZMÀN
package binarioaentero;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner numero = new Scanner(System.in);
System.out.print(«Ingresa un numero en codigo Binario:»);
int n = numero.nextInt();
int ex=-1;
System.out.print(«El codigo binario » + n + » convertido a entero es:» +entero(n,ex));
}
public static int entero(long val,int ex){
ex++;
if(val==0){
return 0;}
return (int)(((val % 10) * Math.pow(2,ex)) + entero(((val – (val % 10)) / 10),ex));
}
}
Ejercicio 2
Programe un método recursivo que transforme un número entero positivo a notación binaria.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package enteroabinario;
import java.io.*;
public class Main {
public static String Numeroabinario(int num)
{
if (num / 2 != 1)
return Numeroabinario(num / 2) + num % 2;
else
return «1» + num%2;
}
public static void main(int[] arr,int pos) {
if (pos < arr.length / 2) {
int tmp = arr[pos];
arr[pos] = arr[arr.length – pos -1];
arr[arr.length – pos -1] = tmp;
main(arr, pos + 1);
}
}
public static void main(String args[])throws IOException
{
int num;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
System.out.print(«Introduzca un numero :»);
num = Integer.parseInt(entrada.readLine());
System.out.println(«El numero » + num + » convertido a binario es: » + Numeroabinario(num));
}
}
Ejercicio 3
Escriba una definición recursiva de una función que tiene un parámetro n de tipo entero y que devuelve el n-ésimo número de Fibonacci. Los números de Fibonacci se definen de la siguiente manera:
F0 = 1
F1 = 1
Fi+2 = Fi + Fi+1
//CODIGO DE SOLUCION
//Jean Marco Olivares Guzmàn
package Fibonacci;
import java.util.Scanner;
public class Main {
public static int Fibo (int N){
int a1=0,a2=1,actual=1,i;
if (N==0||N==1)
actual=1;
else {
for (i=2; i<=N;i++){
actual=a1+a2;
a1=a2;
a2=actual;
System.out.print(«\n»+a2);
}
}
return(actual);
}
public static void main(String[] args) {
int n=0;
int r=0;
Scanner valor = new Scanner(System.in);
System.out.print(«****FIBONACCI****»);
System.out.print(«\nIngrese Numero:»);
n=valor.nextInt();
r=Fibo(n);
System.out.print(«\nRESULTADO:»+r);
}
}
Ejercicio 4
La forma para calcular cuantas maneras diferentes tengo para elegir r cosas distintas de un conjunto de n cosas es: C(n,r) = n! (r!*(n-r)!) Donde la función factorial se define como n! = n *(n-1)*(n-2)*…*2*1 .Descubra una versión recursiva de la fórmula anterior y escriba una función recursiva que calcule el valor de dicha fórmula.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package formasdiferentes;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException
{
int r;
int n;
int resta,c=0;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
System.out.print(«Introduzca numero r:»);
r = Integer.parseInt(entrada.readLine());
System.out.print(«Introduzca numero n:»);
n = Integer.parseInt(entrada.readLine());
if(n>r){
resta=(n-r);
c= (int) (factorial(n) * factorial(r) * factorial(n – r));
System.out.println(«\n \t» + n + «!=» + factorial(n));
System.out.println(«\n \t» + r + «!=» + factorial(r));
System.out.println(«\n \t» + resta + «!=» + factorial(resta));
System.out.println(c);
}
else{System.out.print(«Error de ingreso de datos,r tiene que ser menor que n»);}
}
static long factorial (int r)
{
if (r<=1)
return 1;
else
{
long resultado = r*factorial(r-1);
return resultado;
}
}
}
Ejercicio 5
Escriba una función recursiva que ordene de menor a mayor un arreglo de enteros basándose en la siguiente idea: coloque el elemento más pequeño en la primera ubicación, y luego ordene el resto del arreglo con una llamada recursiva.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package ordemenoramayor;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
int aux1 = 0;
System.out.print(«Ingrese cantidad de numeros para el arreglo:»);
int tamano = read.nextInt();
int[] arreglo = new int[tamano];
System.out.println(«Ingrese los valores:»);
for(int i = 0; i < tamano; i++) {
arreglo[i] = read.nextInt();
}
for(int i = 0; i < tamano; i++) {
for(int j = 0; j < tamano; j++) {
if(arreglo[i] < arreglo[j]) {
aux1 = arreglo[i];
arreglo[i] = arreglo[j];
arreglo[j] = aux1;
}
}
}
for(int i = 0; i < tamano; i++) {
System.out.print(arreglo[i] + » «);
}
}
}
Ejercicio 6
Escribir una función recursiva que devuelva la suma de los primeros N entero
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package Suma;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
int n;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
do{
System.out.print(«Introduzca numero n:»);
n = Integer.parseInt(entrada.readLine());
}while (n<0);
System.out.println(«La suma de los numeros es:» + n + «=» + suma(n));
}
static long suma (int n)
{
if (n<=1)
return 1;
else
{
long resultado = n+suma(n-1);
return resultado;
}
}
}
Ejercicio 7
Escribir un programa que encuentre la suma de los enteros positivos pares desde N hasta 2. Chequear que si N es impar se imprima un mensaje de error.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package numpositivos;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
int n,p;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
System.out.print(«Introduzca numero n:»);
n = Integer.parseInt(entrada.readLine());
p=n;
while (p>=2){
p=p-2;
}
if (p==0) {
System.out.println(«La suma de los numeros positivos pares de » + n + » es: » + sumapos(n));
} else{
System.out.println(«El numero ingresado es impar»);
}
}
static long sumapos (int n)
{
if (n<=2)
return 2;
else
{
long resultado = n+sumapos(n-2);
return resultado;
}
}
}
Ejercicio 8
Escribir un programa que calcule el máximo común divisor (MCD) de dos enteros positivos. Si M >= N una función recursiva para MCD es
MCD = M si N =0
MCD = MCD (N, M mod N) si N <> 0 (cero)
El programa le debe permitir al usuario ingresar los valores para M y N desde la consola. Una función recursiva es entonces llamada para calcular el MCD. El programa entonces imprime el valor para el MCD. Si el usuario ingresa un valor para M que es < que N el programa es responsable de switchear los valores.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package mcdarreglo;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
int n,p,q,m;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
System.out.print(«Introduzca numero M:»);
m = Integer.parseInt(entrada.readLine());
p=m;
System.out.print(«Introduzca numero N:»);
n = Integer.parseInt(entrada.readLine());
q=n;
System.out.println(«El MCD de M Y N ES:»+sacar_mcd(n, m % n));
}
public static int sacar_mcd(int m, int n) {
if(n==0)
return m;
else
return sacar_mcd(n, m % n);
}
}
Ejercicio 9
Programe un método recursivo que invierta los números de un arreglo de enteros.
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package invertirarreglo;
import java.util.Scanner;
public class Main {
public static void InvertirR(){
int entrada;
Scanner num= new Scanner (System.in);
System.out.println(«Ingrese el tamaño del arreglo:»);
entrada=num.nextInt();
int arr []=new int [entrada];
for (int i=0;i<arr.length;i++){
System.out.println(«ingrese del vector:»);
arr[i]=num.nextInt();
}
int inicio=0,fin=arr.length-1;
arr = InvierteRec(arr,inicio,fin);
for (int i=0;i<arr.length;i++){
if(i==0){
System.out.println(«—–INVIRTIENDO—— «);
System.out.println(«El vector invertido:»);}
System.out.println(arr[i]);
}
}
public static int[] InvierteRec(int [] a,int i,int f){
while (i<=f){
int temp = a[f];
a[f] = a[i];
a[i] = temp;
return InvierteRec(a,i+1,f-1);
}
return a;
}
public static void main(String[] args) {
InvertirR();
}
}
Ejercicio 10
Cuál es el resultado de esta función para distintos valores de X?
Static int f(int x)
{
if (x >100)
{
return (x-10);
}
else
{
return(f(f(x+11)));
}
}
//CODIGO DE SOLUCION
//JEAN MARCO OLIVARES GUZMÀN
package invertirarreglo;
import java.util.Scanner;
public class Main {
public static void InvertirR(){
int entrada;
Scanner num= new Scanner (System.in);
System.out.println(«Ingrese el tamaño del arreglo:»);
entrada=num.nextInt();
int arr []=new int [entrada];
for (int i=0;i<arr.length;i++){
System.out.println(«ingrese del vector:»);
arr[i]=num.nextInt();
}
int inicio=0,fin=arr.length-1;
arr = InvierteRec(arr,inicio,fin);
for (int i=0;i<arr.length;i++){
if(i==0){
System.out.println(«—–INVIRTIENDO—— «);
System.out.println(«El vector invertido:»);}
System.out.println(arr[i]);
}
}
public static int[] InvierteRec(int [] a,int i,int f){
while (i<=f){
int temp = a[f];
a[f] = a[i];
a[i] = temp;
return InvierteRec(a,i+1,f-1);
}
return a;
}
public static void main(String[] args) {
InvertirR();
}
}
Ejercicio 11
Implemente una función recursiva que nos diga si una cadena es palíndromo.
//CODIGO DE SOLUCION
package pkjpalindromo;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//String sPalabra = «anilina»;
System.out.println(«Ingrese una palabra:»);
String sPalabra = «da arroz a zorra el CAMBIO»;
int inc = 0;
int des = sPalabra.length()-1;
boolean bError = false;
while ((inc<des) && (!bError)){
if (sPalabra.charAt(inc)==sPalabra.charAt(des)){
inc++;
des–;
} else {
bError = true;
}
}
if (!bError)
System.out.println(sPalabra + » es un PALINDROMO»);
else
System.out.println(sPalabra + » NO es un palindromo»);
}
}
//SON VARIOS PROBLEMA QUE SE TRABAJA CON RECURSIVIDAD CUALQUIER CUDA NO DUDEN EN COMUNICARMELA….SALUDOS A TODOS Y GRACIAS POR EL APOYO