Autor
|
Tema: recursividad cruzada (Leído 5,319 veces)
|
fernaEDLP
Desconectado
Mensajes: 48
|
hola nakamas como estan?, espero que bien, necesitaría ayuda, me piden que cree una función recursiva que determine si un numero es positivo o no, es un caso de recursividad cruzada, casi seguro que tengo un error conceptual en mi problema, mi duda està en que en c no puedo usar public boolean(con false y true), e hice esto, pero obviamente no compila: y tengo otra, se puede crear una tercer funcion para que solamente llame a esa sola? #include <stdlib.h> #include <string.h> int negativo(int n); int positivo(int n); int main() { int N; printf("ingrese el numero\n"); positivo(N); negativo(N); return 0; } int positivo(int n) { if(n>=0) { printf("el numero ingresado es positivo"); } else { return negativo(n); } } int negativo(int n) { if(n<0) { return n; printf("el numero ingresado es nevativo"); } else { return positivo(n); } }
|
|
|
En línea
|
|
|
|
CalgaryCorpus
|
- Que valor retorna la funcion positivo si el valor que recibe como parametro es efectivamente positivo? - Sugiero que las funciones positivo y negativo retornen 1 o 0. - Sugiero que no hagas ningun printf al interior de esas funciones, sino que sea el main el que lo haga basado en el valor que esas funciones retornen.
|
|
|
En línea
|
|
|
|
K-YreX
|
Si pudieras especificar un poco más tu problema... Es decir, ese programa compilar, compila (si le añades la librería <stdio.h> para poder usar <scanf()> y <printf()>). Además puedes quitar <stdlib.h> y <string.h> ya que no estás usándolo para nada en todo el programa. De todos modos ese programa sigue teniendo errores (aunque ya compila). Si llamas a <positivo(n)> con n positivo, sale el mensaje por pantalla "el numero ingresado es positivo" pero no has hecho ningún <return> (creo que entonces se retorna n pero es mejor especificarlo en el código para que quede explícito). Si llamas a <negativo(n)> con n negativo, la función retorna n, pero no se mostrará por pantalla "el numero ingresado es nevativo" (creo que querías poner "neGativo" ) porque una vez que una función ejecuta un <return> ya sale de la función y no se ejecuta lo que venga después. Por eso que no se muy bien cual es el fin de esa función, si quieres retornar el mismo número que mandas como parámetro o quieres retornar 1 o 0 como si fuese true o false respectivamente... Y sí, si quieres crear otra función que llame a una de esas puedes hacerlo, pero lo veo un poco absurdo todo esto porque son dos funciones muy sencillas. Algo más funcional sería: int positivo(int n){ return (n >= 0); }
Que devuelve 1 si es positivo y 0 si es negativo. De que sirve crear una función <negativo()> si <negativo() == !positivo()>??
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
Hola gracias a los dos por las respuestas, ajaja si creo que la RAE todavia no modifico el negativo a nevativo, en realidad el enunciado del problema dice cree un algoritmo recursivo que diga si un numero ingresado es negativo o positivo, ya c que suena tonto, pero buscando por internet vi que lo resuelven con recursividad cruzada, pero usan una sentencia que dice public boolean y retornan un true o un false, pero eso estaba resuelto en java
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
0 es considerado false, diferente a 0 es considerado true. Pero a partir de C99 hicieron la librería stdbool que sirve para manejar true y false.
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
graciass
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Me gustó el problema y supongo que ya lo tienes solucionado, así que me he dispuesto a dar solución recursiva a ello. Poco eficiente pero recursiva. Usa una función de interface: #include <stdio.h> int f1(unsigned long n, unsigned long long s) { return s==1? n : f1(n>>1, --s); } int es_negativo(unsigned long n) { return f1(n, sizeof(unsigned long long)*8); } int main() { printf("%d\n", es_negativo (65536)); printf("%d\n", es_negativo (-32)); }
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
Mafus gracias,se nota que sabes programar avanzado pero es demasiado eso para mi, ajaajaj, hace de cuenta que le estas enseñando a un cavernicola, porque usas sizeof?, y que significa --s?
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
tampoco entiendo porque le pasas como parametro n>>1
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
tu codigo para super pro, a mi al final me quedo esto estaria bien? int negativo(int n); int positivo(int n); int main() { int N; printf("ingrese el numero\n"); positivo(N); negativo(N); return 0; } int positivo(int n) { if(n>=0) { return 1; } else { printf("el numero es negativo\n"); return negativo(n); } } int negativo(int n) { if(n<0) { return 0; } else { printf("el numero es positivo\n"); return positivo(n); } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Facebook intensifica su cruzada contra los “Me gusta” falsos
Noticias
|
wolfbcn
|
1
|
2,500
|
3 Septiembre 2012, 18:25 pm
por crazykenny
|
|
|
Mi primera cruzada contra un EXECryptor ?
« 1 2 »
Ingeniería Inversa
|
TrashAmbishion
|
11
|
7,491
|
6 Septiembre 2013, 05:04 am
por apuromafo CLS
|
|
|
Compilacion cruzada
Programación C/C++
|
engel lex
|
6
|
3,454
|
21 Septiembre 2013, 19:11 pm
por engel lex
|
|
|
OPENCV imposible compilacion cruzada para ARM
GNU/Linux
|
cacaito
|
0
|
2,355
|
18 Junio 2014, 17:35 pm
por cacaito
|
|
|
referencia cruzada de campos de una tabla en mysql
Desarrollo Web
|
iori100
|
0
|
2,818
|
15 Enero 2018, 14:26 pm
por iori100
|
|