Estos son algunos ejemplos para que vean que en la
programacin hay muchas formas de hacer las cosas,
aunque siempre hay una que es la ms eficiente, aunque casi nunca es muy evidente. Veamos como invertir un string de tres formas distintas. Por ejemplo, si tenemos el string puntopeek, el mtodo devolvera keepotnup. Veamos el primer ejemplo, es el que casi todos conocemos, y es muy fcil de implementar, vamos recorriendo la palabra desde el ultimo caracter hasta el primero y vamos guardando cada letra en un nuevo string, que es el que devolver el mtodo. El cdigo sera algo as: public string Invertir(string s) { string aux = ""; //Recorremos el string en orden inverso for (int i = s.Length - 1; i >= 0; i--) aux += s[i]; //retornamos la nueva cadena return aux; }
Otra opcin (pero hay que conocer que es una pila), es ir
guardando cada letra en una pila (stack), y luego cuando esten todas las letras las sacamos de la pila. Noten que en esta estructura, el primer elemento que entra, es el ltimo en salir, por eso nos sirve tambin para invertir un string. El cdigo sera este: public string Invertir2(string s) { //Declaramos una pila usando genericidad.
//Esto se puede hacer con el framework 2.0
Stack stack = new Stack(); //Recorremos el string y vamos metiendo en la pila //cada caracter for (int i = 0; i < s.Length; i++) stack.Push(s[i]); string aux = ""; //Vamos sacando de la pila los caracteres y los //ponemos uno a uno en un nuevo string for (int i = 0; i < s.Length; i++) aux += stack.Pop(); return aux; }
Ahora veremos la versin recursiva del problema. Si lo
analizan paso a paso, vern que hace practicamente lo mismo que Invertir2. Como vern, este mtodo no necesita almacenar ningun caracter, ni copiar, la recursividad se encarga de todo. En realidad la recursividad funciona como una pila (Invertir2) pero no hay que declarar variables ni nada de eso. A veces algunos mtodos recursivos parecen mgicos, pero una vez dominemos esta tcnica dominaremos el arte de programar. Al menos lo esencial. Veamos el cdigo: public string Invertir3 (string s, int lenght) //El parametro lenght es el tamao del string s { //Condicion de parada if (lenght == 1) return s; else //Llamado recursivo return Invertir3 (s.Substring(1, s.Length - 1), lenght - 1) + s[0].ToString(); }
Para que se den cuenta de lo que hace el mtodo, es
necesario que le hagan un debug paso a paso, y vayan viendo como se transforman las variables locales. Si tienen alguna otra solucin de como Invertir un string
pueden ponerla en los comentarios. Y hasta aqu este
post, espero escribir un poco ms seguido, pero estoy con muchos proyectos en la universidad y mucho trabajo. Han oido hablar del WinZip o el WinRar? Proximamente estaremos hablando del Algoritmo de Huffman, que se utiliza mucho en el compactacin de texto y archivos.