elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 10:05  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  De forma recursiva
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: De forma recursiva  (Leído 5,835 veces)
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
De forma recursiva
« en: 2 Septiembre 2008, 23:45 »

Hola foro :D

Aquí dos ejercicios.

1ro. Realizar un programa en Java que de forma recursiva verifique si un número es positivo. El método debe ser booleano, osea devolver true o false, dependiendo del número introducido.

2do. Realizar un programa en Java que de forma recursiva sume 2 números naturales.

Sencillo cierto?
Espero sus respuestas.

Un saludo


En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: De forma recursiva
« Respuesta #1 en: 3 Septiembre 2008, 00:06 »

No me parecen tareas recursivas.

Código
public boolean esPositivo(int numero)
{
   return numero >=0;
}


« Última modificación: 3 Septiembre 2008, 00:10 por carlitos.dll » En línea
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #2 en: 3 Septiembre 2008, 04:55 »

No me parecen tareas recursivas.

Código
public boolean esPositivo(int numero)
{
   return numero >=0;
}

Lamento decirte que tu ejercicio esta mal.
Cualquiera, uno de 1ro puede hacer lo que hiciste, no te ofendas pero yo lo pedí de forma recursiva.
Mira, cuando me plantearon el ejercicio creí lo mismo que tú.

Citar
Osea para que lo hago de forma recursiva si es muy simple sacarlo.

Pero te pido que intentes hacerlo de forma recursiva, haber si es tan sencillo.



Ahora, lo de sumar dos números, de la misma forma, se puede hacer muy simple sin recursividad, pero yo lo estoy pidiendo recursivo, porque te hace analizar un poco mas el ejercicio, no digo que sea difícil, pero al menos el procedimiento cambia, con solo decirte que para sumar dos números, debes utilizar la resta.

Espero lo resuelvan de forma recursiva.

Un saludo
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
chrominum


Desconectado Desconectado

Mensajes: 564


Viceroy: No es lo que tengo, es COMO lo tengo


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #3 en: 3 Septiembre 2008, 23:38 »

¿Con un if de pormedio?
En línea

ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #4 en: 4 Septiembre 2008, 02:28 »

¿Con un if de pormedio?

Si, el if es la condicionante que determina el axioma.
Mira, voy a resolver la suma de dos números de forma recursiva.

Código
    static int sumar(int a, int b)
   {
       if(b==0) return a;
       else
           return sumar(a, b-1) + 1;
   }
 

Explicando un poco

Código
 if(b==0) return a; 

Osea si uno de los dos números, en mi caso el que este en la variable "b" es cero entonces no tiene caso sumar nada, asi que retornamos el número de la otra variable, ejemplo:

 a = 5;  b = 0;

 sumar = a;

Código
else
           return sumar(a, b-1) + 1;

ahora, por falso, lo que hacemos es reducimos el segundo parámetro que esta en nuestra variable "b" la cantidad de veces que se pueda hasta que llegue a cero.

Y una ves que llegue a cero que hacemos?
Pues, necesitamos un contador que nos diga cuantas veces se ha reducido el número y eso nos dará como resultado el número introducido.

Entonces en lo que haya sumado el contador le aumentamos a; que esta fijado en el axioma, lo cual nos devuelve a + b, pero de forma recursiva.

Nose si está claro, a veces no soy bueno explicando.

Un saludo


En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: De forma recursiva
« Respuesta #5 en: 4 Septiembre 2008, 03:09 »

No me ofendo, pero en el primer ejercicio, donde esta la recursividad?

Y en tu segundo código, si quieres sumar 3 + -2, queda recursando infinitamente, y se cae por StackOverflowError.

Wikipedia dice, que la recursividad debe utilizarse en procesos recursivos, como la factorización.


« Última modificación: 4 Septiembre 2008, 03:20 por carlitos.dll » En línea
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #6 en: 4 Septiembre 2008, 03:34 »

No me ofendo, pero en el primer ejercicio, donde esta la recursividad?


Pues, cuando encuentres la recursividad habrás resuelto el ejercicio.

Citar
Y en tu segundo código, si quieres sumar 3 + -2, queda recursando infinitamente, y se cae por StackOverflowError.

no estoy sumando 3 + -2, analiza nuevamente el código y te darás cuenta que no sumo la 2da variable.

Código
return sumar(a, b-1) + 1;

Lo que en verdad sumo es a + el contador
Citar
return sumar(a, b-1) + 1;
, ese +1 esta incrementando cada ves que el número dentro la variable b se va reduciendo.

Ahora claro está de que si no existiera el axioma

Código
if(b==0) return a;

nada tendría sentido.
Pero ese if, es el encargado de para el proceso y lanzar un resultado.
Mira, cuando a mi me dijeron que lo haga, yo lo creí loco a mi docente, porque pensaba lo mismo que tu, pero a tanta insistencia me hizo pensar un poco y alcancé el resultado.

Un saludo
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
Hadess_inf
Omni ¡¡¡¡
Colaborador
***
Desconectado Desconectado

Mensajes: 1.891


Yes ? my lady.


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #7 en: 4 Septiembre 2008, 04:04 »

1ro. Realizar un programa en Java que de forma recursiva verifique si un número es positivo. El método debe ser booleano, osea devolver true o false, dependiendo del número introducido:

Código
public boolean tipo(int num)
{
  if(num==0)  
     return tipo(num);
  else
  {
    if(num>0) return true;
    else
       return false;
   }
}

2do. Realizar un programa en Java que de forma recursiva sume 2 números naturales.

Código
static int sumar(int a, int b)
{
  if(b==0) return a;
  else
  {
     if(b>0) return sumar(a, b-1) + 1;
     else
        sumar(a, b+1) - 1;
   }
}

Creo que es asi.
 ;D ;D ;D ;D
« Última modificación: 4 Septiembre 2008, 04:09 por hadess_inf » En línea

carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: De forma recursiva
« Respuesta #8 en: 4 Septiembre 2008, 04:32 »

ohk, me refería a que tu code, si le pasas parámetros al método, como por ejemplo:

Código
System.out.println(sumar(3, -2));

Se queda infinitamente recursando.

El code que postió hadess_inf, funciona.
Código
public static int sumar(int a, int b)
{
  if(b==0) return a;
  else
  {
     if(b>0) return sumar(a, b-1) + 1;
     else
        sumar(a, b+1) - 1;
   }
}
 

Pero a este si se le pasa 0, queda en un ciclo infinito.
Código
public boolean tipo(int num)
{
  if(num==0)  
     return tipo(num);
  else
  {
    if(num>0) return true;
    else
       return false;
   }
}
 

Me rectifico, en el sentido de que si se podía sumar dos números recursivamente, pero en cuanto a verificar el tipo, pienso que no es recursivo.

En línea
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #9 en: 4 Septiembre 2008, 04:46 »

Le encuentran un pero a todo no?

Bueno si, en caso de que quieran meter un número negativo para "b" pues si.

Pero:

Citar
2do. Realizar un programa en Java que de forma recursiva sume 2 números naturales.

es.wikipedia.org/wiki/Número natural

Bueno, igual el ejercicio esta bien resuelto.
Lo de verificar si un número es positivo lo posteo luego, ya tengo sueño :P

Un saludo

En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: De forma recursiva
« Respuesta #10 en: 4 Septiembre 2008, 05:11 »

Ahora si.

Código
 public static boolean tipo(int num)
   {
       if (num == 0)
       {
           return true;
       } else
       {
           if (num < 0){
               return tipo(num +- num) && false;
           }else {
               return tipo(num - num) || true;
           }
       }
   }
 
« Última modificación: 4 Septiembre 2008, 05:21 por carlitos.dll » En línea
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #11 en: 4 Septiembre 2008, 05:17 »

Código
    public static boolean tipo(int num)
   {
 
       if (num == 0)
       {
           return true;
       }
       else {
           if (num < 0){
               return tipo(num + 1) && false;
               }
           else {
           return tipo(num - 1);
           }
       }
   }
 


Congratulations

Well done, Carlitos.dll :D

have a nice day  ::)
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: De forma recursiva
« Respuesta #12 en: 4 Septiembre 2008, 05:18 »

Lo modifiqué justo, para que sea más efectivo.

Parece código ofuscado. :D

Ojalá coloques más ejercicios.

En línea
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #13 en: 4 Septiembre 2008, 05:24 »

Lo modifiqué justo, para que sea más efectivo.

Parece código ofuscado. :D

Ojalá coloques más ejercicios.



:D

viste que si había una solución  :P
Bien hecho, solo tenías que ser mas perseverante.  ;)

Ahora, a pedido tuyo voy a seguir posteando ejercicios mañana.

Un saludo

OHK
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: De forma recursiva
« Respuesta #14 en: 4 Septiembre 2008, 15:13 »

Hola :D

Como lo prometido es deuda, aquí les traigo resuelto el ejercicio de verificar si un número es positivo.
Ya sé que lo resolvieron pero lo tengo resuelto de otra forma, un poco mas "compleja".
Espero les sirva y le entiendan.

Código
    public boolean positivo(int n){
    if(n>0) return true;
    else return negativo(n);
   }
 
   public boolean negativo(int n){
    if(n<0) return false;
    else return  positivo(n);
   }
 
 

Bueno que al final es lo mismo, pero utiliza recursividad cruzada o indirecta.

Recursividad cruzada o indirecta
Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones.

Un saludo

OHK

En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
recorrido de una matriz de forma recursiva
Programación General
dark_headhunter 4 1,645 Último mensaje 10 Junio 2011, 23:39
por Khronos14
Cargar una matriz de forma recursiva[c]
Programación C/C++
axeelcs 3 1,538 Último mensaje 1 Septiembre 2011, 20:43
por LearningSpanishProgrammer
Busqueda recursiva
Programación C/C++
s3tH 7 266 Último mensaje 6 Mayo 2012, 02:46
por david_BS
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines