Autor
		 | 
		
			Tema: [C] - Recursividad problema  (Leído 7,626 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,517
						 | 
						
							 
							
								20 Agosto 2011, 21:34 pm 
								por BlackZeroX
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Problema de recursividad en VB
							 
							.NET (C#, VB.NET, ASP)
						 | 
						
							Anabel3
						 | 
						
							0
						 | 
						
							2,477
						 | 
						
							 
							
								26 Junio 2012, 07:17 am 
								por Anabel3
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							problema con recursividad + punteros + TRIE,  PLAIN C
							 
							Programación C/C++
						 | 
						
							luisdr22
						 | 
						
							7
						 | 
						
							4,662
						 | 
						
							 
							
								23 Octubre 2012, 21:31 pm 
								por do-while
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Problema con recursividad y buscaminas.
							 
							Programación C/C++
						 | 
						
							miguel0542
						 | 
						
							1
						 | 
						
							4,093
						 | 
						
							 
							
								 5 Junio 2016, 23:49 pm 
								por do-while
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							[Problema con recursividad] Java
							 
							Java
						 | 
						
							Desu Nya
						 | 
						
							2
						 | 
						
							4,230
						 | 
						
							 
							
								 8 Octubre 2017, 20:24 pm 
								por Desu Nya
							
						 | 
					 
				 
			    |