Ver Mensaje Individual
  #38 (permalink)  
Antiguo 28/11/2014, 04:10
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Petando la pila. Problemas y retos usando recursividad.

El primer ejecicio:
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. string noRep(string cadena)
  6. {
  7.     if (cadena.empty() || cadena.size() == 1) return cadena;
  8.     else
  9.     {
  10.         if (cadena[0] == cadena[1])
  11.         {
  12.             return noRep(cadena.substr(1));
  13.         }
  14.         else
  15.         {
  16.             string a = noRep(cadena.substr(1));
  17.             a.insert(a.begin(),cadena[0]);
  18.             return a;
  19.         }
  20.     }
  21. }
  22.  
  23. int main()
  24. {
  25.     cout<<noRep("abccccfabaddeff")<<endl;
  26. }

Pero si le añadimos el parámetro indice, es mucho más eficiente (y sencillo):

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. string noRep(string cadena,unsigned int indice = 0)
  6. {
  7.     if (cadena.empty() || cadena.size() == 1 || indice == cadena.size()-1) return cadena;
  8.     else
  9.     {
  10.         if (cadena[indice] == cadena[indice+1])
  11.         {
  12.             cadena.erase(indice,1);
  13.             return noRep(cadena,indice);
  14.         }
  15.         else
  16.         {
  17.             indice++;
  18.             return noRep(cadena,indice);
  19.         }
  20.     }
  21. }
  22.  
  23. int main()
  24. {
  25.     cout<<noRep("abccccfabaddeff")<<endl;
  26. }

En cuanto al segundo, valen que sean repetidos los colmillos?, por ejemplo el número 25 sería vampiro ya que: 5*5