Autor
|
Tema: [C] - Recursividad problema (Leído 6,739 veces)
|
cbug
Desconectado
Mensajes: 147
|
Hola, estoy repasando nuevamente lo que sé hasta el momento y se me cruzó por la cabeza resolver recursivamente un conteo de vocales, quisiera saber si ustedes creen que es la manera correcta de resolverlo, si existen mejores soluciones... etc #include <stdio.h> #define ptrNULL 0 int es_vocal(char c) { /* Aqui se presento la situacion de un switch no se precisamente cual solucion es la mejor */ char conjunto[] = {'a','e', 'i', 'o', 'u'}; int i; for(i = 0; i < 5; i++) if(c == conjunto[i]) return 1; return 0; } unsigned int contar_vocal(char *palabra) { if(*palabra == ptrNULL) return 0; else { palabra++; return (1 + contar_vocal(palabra)); } else { palabra++; return contar_vocal(palabra); } } int main() { char *s = "MUrCiELagO"; int cnt; cnt = contar_vocal(s); printf("\nCantidad > %d\n", cnt ); return 0; }
|
|
|
En línea
|
|
|
|
MIG80
Desconectado
Mensajes: 38
|
Otra solución: #include <stdio.h> #include <ctype.h> int esvocal(char c); int main(void) { char *pchar,str[]="MurCieLago"; int nv=0; for(pchar=str;*pchar;pchar++) { if(esvocal(*pchar)) nv++; } printf("Cantidad de vocales:%d\n",nv ); return 0; } int esvocal(char c) { return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u'); }
Opino que las soluciones recursivas solo deben ser utilizadas cuando hacen más facil el entender el problema. Como en el caso de las torres de hanoi por ejemplo.
|
|
« Última modificación: 4 Julio 2010, 02:06 am por czealt »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
De cierta manera, es otra forma de resolverlo, pero sin recursividad...
Respecto a tu opinión, por el momento no tengo un argumento fuerte para poner en discusión...
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
cbug, te falta incluir la libreria ctype.h para la funcion tolower() Aca dejo otro codigo... #include <stdio.h> #include <ctype.h>
int contarVocales( char *palabra ) { char c;
if ( *palabra == '\0' ) { return 0; } else { c = tolower( *palabra ); if ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ) { return ( 1 + contarVocales( ++palabra ) ); } else { return contarVocales( ++palabra ); } } }
int main( void ) { char *s = "MUrCiELagO"; printf("Cantidad: %d\n", contarVocales( s ) ); return 0; } Salu10.
|
|
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
Cierto, ahora una pregunta, tu que estás más adentrado en el tema...
Es más conveniente hacer un bucle de búsqueda de "vocal", o hacer una comparación ya sea mediante un if() o switch()?
|
|
|
En línea
|
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
Cierto, ahora una pregunta, tu que estás más adentrado en el tema...
Es más conveniente hacer un bucle de búsqueda de "vocal", o hacer una comparación ya sea mediante un if() o switch()?
Yo lo que haría, es un puntero a la matriz y, con un bucle que la vaya recorriendo. Luego le añades un if() para buscar la letra. Saludos
|
|
« Última modificación: 26 Agosto 2010, 01:04 am por Horricreu »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
No comprendo.
|
|
|
En línea
|
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
No comprendo.
Es lo que hizo czealt, pero te explico la parte dónde busca: char str[] = "MurCieLago"; char *pchar = str; for(; *pchar; pchar++) { if(esvocal(*pchar)) //...
Primero creas una matriz con la palabra deseada, en este caso: murciélago; seguidamente, creamos un puntero que va a apuntar a la matriz creada; luego en el for(), con el puntero creado vamos recorriendo el CONTENIDO de la matriz, o sea los carácteres, y dentro de este for(), le hacemos un if() para comprobar si existe una vocal. ¿Entiendes? Te lo puedo explicar mejor si quieres Aunque esta sería mi forma de hacerlo Saludos
|
|
« Última modificación: 26 Agosto 2010, 01:02 am por Horricreu »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
Ah, claro... me confundí, porque pensé que hacías referencia a mi última pregunta... Porque en realidad estaba tratando el tema de recursividad antes que el método iterativo
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Si te referias a comprobar si un caracter es una vocal tambien puedes utilizar este metodo. int esvocal(char c) { char vocales[]="aeiou"; }
Y bueno, el metodo recursivo que haas planteado es correcto, aunque prefiero el iterativo. ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema de entendimiento recursividad.
Programación C/C++
|
axeelcs
|
7
|
5,064
|
20 Agosto 2011, 21:34 pm
por BlackZeroX
|
|
|
Problema de recursividad en VB
.NET (C#, VB.NET, ASP)
|
Anabel3
|
0
|
2,300
|
26 Junio 2012, 07:17 am
por Anabel3
|
|
|
problema con recursividad + punteros + TRIE, PLAIN C
Programación C/C++
|
luisdr22
|
7
|
4,224
|
23 Octubre 2012, 21:31 pm
por do-while
|
|
|
Problema con recursividad y buscaminas.
Programación C/C++
|
miguel0542
|
1
|
3,763
|
5 Junio 2016, 23:49 pm
por do-while
|
|
|
[Problema con recursividad] Java
Java
|
Desu Nya
|
2
|
3,806
|
8 Octubre 2017, 20:24 pm
por Desu Nya
|
|