Ejercicios Recursivos en Java y sus Soluciones

Iniciado por :ohk<any>, 11 Octubre 2008, 03:19 AM

0 Miembros y 1 Visitante están viendo este tema.

Amerikano|Cls

Aqui agrego unos mios:

- Determinar si una palabra es Palíndroma:

Código (java) [Seleccionar]
public boolean palindroma(String palabra, int i, int j){

     if(i != (palabra.length()/2)){
         if(palabra.charAt(i) == palabra.charAt(j))
             return palindroma(palabra, ++i, --j);
         else
             return false;
     }
      return true;
}



- Sumar el borde de una matriz de enteros:

Código (java) [Seleccionar]
public int sumaBorde(int i, int j){

     if(i >matriz.length-1)
         return 0;
     else{
         if(j > matriz.length-1 ){
             j=0;
             i++;
             return sumaBorde(i,j);
         }else{
             if((i==0) || (i==matriz.length -1) || (j==0) ||(j==matriz.length -1))
                 return matriz[i][j] + sumaBorde(i,j+1);
         }
     }
     return sumaBorde(i,j+1);
}


Salu2




Mi blog:
http://amerikanocls.blogspot.com

djrocha

Buenas tardes:

Me gustaría conocer el código de estos ejercicios implementándolo en ambiente gráfico. Gracias.

VonN

Es lo mismo.
Son algoritmos, así que puedes implementarlos como función, y luego pasarle los parámetros correspondientes desde tus objetos.

Un saludo



Se toma por necios a aquellos que dicen lo que todos pesamos

saintmauricioxd

Cita de: pixzeto en 11 Junio 2009, 02:03 AM
Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
2 + invertir(3)*10  =  2 + 3*10  =  32


     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }



Pero lo hice así y funciona:

public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}

Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento ;)

cibercito

Cita de: saintmauricioxd en 20 Abril 2010, 18:44 PM
Cita de: pixzeto en 11 Junio 2009, 02:03 AM
Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
2 + invertir(3)*10  =  2 + 3*10  =  32


     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }



Pero lo hice así y funciona:

public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}

Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento ;)

Me gustaria una aclaracion sobre recursividad ,ya que sin ella discrepo contigo , porque considero que ese algoritmo si es recursivo por aplicarse el tambien cierto concepto de :" La recursividad simplemente significa aplicar una función como parte de la definición de esa misma función. " . (yo lo entiendo como , si una funcion se llama dentro de su misma funcion = recursividad )
Entonces quisiera saber : si una funcion tiene n bucles PERO SE HACE RECURSIVIDAD (osea el concepto que yo manejo) , el algoritmo es recursivo o deja de serlo por tener n bucles ?.

leogtz

Cita de: saintmauricioxd en 20 Abril 2010, 18:44 PM
Cita de: pixzeto en 11 Junio 2009, 02:03 AM
Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
2 + invertir(3)*10  =  2 + 3*10  =  32


     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }



Pero lo hice así y funciona:

public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}

Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento ;)

Mal, muy mal, los ciclos no tienen nada que ver con la recursividad, repasa tus apuntes.

Y como prueba, observa algunos algoritmos recursivos, como la ordenación quicksort.

http://es.wikipedia.org/wiki/Quicksort
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

shigure-dark

estoy realizando un ejercicio donde ya realise un programa en el cual ingreso un numero positivo y este me genera la tabla de multiplicar hasta el 10

el asunto es que no tengo ni la mas minima idea de como hacer que este se vulva recursivo ya que en todas las veces que se comento en ninguna el programa esta echo como mi profesora me lo enseño.

espabe

Hola amigos! estoy llevando un curso de informatica pero yo soy un principiante en la materia. Quisiera saber como ustedes harían un programa con las siguientes normas:

Implemente, tanto de forma recursiva como de forma iterativa, un método que nos devuelva el máximo común divisor de dos números enteros utilizando el algoritmo de Euclides.
ALGORITMO DE EUCLIDES
Dados dos números enteros positivos m y n, tal que m > n, para encontrar su máximo común divisor (es decir, el mayor entero positivo que divide a ambos):
a)   Dividir m por n para obtener el resto r (0 <= r < n)
b)   Si r = 0, el MCD es n.
c)   Si no, el máximo común divisor es MCD(n,r).


Espero que me puedan ayudar, Gracias!!


Aeros

xDDDDDDD muestranos lo que tienes y te ayudaremops :D:D

PD : tarea??

[L]ord [R]NA

Aqui no se hacen tareas... dejen de pedir eso.