Conversion a posftija recursiva

Hola a todos, les comento que tengo un problema, estoy llevando el curso de estructura de datos en la universidad, y el profe nos enseño a convertir expresiones infija a postfija y prefija, usando una pila.
Pero ya acabamos el tema de pilas y colas , ahora hemos entrado al tema de recursividad, y el profe nos dejo la tarea de
convertir expresiones infija a postfija pero usando recursividad, por mas vueltas que le doy al asunto no se me ocurre absolutamente nada,
no se imaginan la pena que siento de pedirles ayuda sin nisiquiera mostrarles algun codigo =(, disculpenme por eso pero es que enserio no se me ocurre nada sobre como hacerlo, por eso necesito su ayuda, si alguien tiene alguna idea de como hacerlo, le agradeceria mucho que la comparta conmigo

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Recursividad

Recursividad significa que un método se llame a sí mismo. Si pudieras enviar el código que les dio el maestro podría darte una sugerencia de como hacerlo recursivo. Ya que de otra manera sería mucho trabajo hacerlo todo desde el principio, Saludos

Imagen de XinefPro

Este es el algoritmo :

El algoritmo para conversión de expresiones es muy conocido mira este es el algoritmo :

INICIO
     Crear pila y la lista de salida, inicialmente vacias.
     MIENTRAS lista de entrada no este vacia y
              no se ha encontrado ningun error HACER
       Extraer el primer termino de la lista (lo llamaremos E)
       SEGUN-SEA E
         CASO E es número :
           Insertar E al final de la lista de salida
         CASO E es la variable x :
           Insertar E al final de la lista de salida
         CASO E es un paréntesis izquierdo :
           Insertar E en la pila
         CASO E es un paréntesis derecho :
           MIENTRAS La pila no este vacía y
                    su cima no sea un paréntesis izquierdo HACER
             Extraer elemento de la pila
             Insertarlo al final de la lista de salida
           FIN-MIENTRAS
           SI Encontramos el parentesis izquierdo ENTONCES
             Extraerlo de la pila y destruirlo
           SINO
             Se ha detectado un ERROR 2
           FIN-SI
           Destruir E
         CASO E es un operador :
           MIENTRAS La pila no este vacía y
                    su cima sea un operador
                    de precedencia mayor o igual que la de E HACER
             Extraer elemento de la pila
             Insertarlo al final de la lista de salida
           FIN-MIENTRAS
           Insertar E en la pila
       FIN-SEGUN-SEA
    FIN-MIENTRAS
    MIENTRAS Pila no esté vacía HACER
      Extraer elemento de la pila
      Insertarlo al final de la lista de salida
    FIN-MIENTRAS
    Destruir pila
  FIN

Y este es el codigo en Java que hicimos en clase

public static String aPostfija( String infija )
{
   Pila pila = new Pila( infija.length() );
   char carActual;
   String postfija = "";

   for( int i = 0; i < infija.length(); i ++ )
   {
      carActual = infija.charAt( i );
                       
      if( carActual == '(' )
         pila.insertarElemento( carActual );

      else if( carActual == ')' )
      {
         while( pila.mirarCima() != '(' )
            postfija += pila.eliminarElemento();

         pila.eliminarElemento();
      }

      else if( esUnOperador( carActual ) )
      {
         while( !pila.estaVacia() && esUnOperador( pila.mirarCima() )
                && !esMayorPrioridad( carActual, pila.mirarCima() ) )
         {
            postfija += pila.eliminarElemento();
         }

         pila.insertarElemento( carActual );
      }
                       
      else
         postfija += carActual;
   }

   while( !pila.estaVacia() )
      postfija += pila.eliminarElemento();

   return postfija;
}

Lo que necesito es un algoritmo que haga lo mismo que el algoritmo anterior osea convertir expresiones infijas a postfijas pero el algoritmo debe de ser recursivo =(

Para hacerlo recursivo

Para hacerlo recursivo tienes que quitar el for y en su lugar poner el método aPostfija(). De hecho, así se logra la recursividad casi siempre, es decir, sustituyendo el for (o el while) por el mismo método que está usando la instrucción for. De momento es lo que te puedo decir. Búscale por ahí, el fin de semana lo trabajo un poco más porque se me hace interesante. Saludos

Imagen de XinefPro

Si es que entendi bien lo

Si es que entendi bien lo que propones, osea hacer un recorrido recursivo de la expresion , entonces el algoritmo seria masomenos asi :

public static String aPostfija( String infija, Pila pila, String posftija  )
{
   char carActual;

   carActual = infija.charAt( 0 );
                       
   if( carActual == '(' )
      pila.insertarElemento( carActual );
   else if( carActual == ')' )
   {
      while( pila.mirarCima() != '(' )
         postfija += pila.eliminarElemento();

      pila.eliminarElemento();
   }
   else if( esUnOperador( carActual ) )
   {
      while( !pila.estaVacia() && esUnOperador( pila.mirarCima() )
      && !esMayorPrioridad( carActual, pila.mirarCima() ) )
      {
         postfija += pila.eliminarElemento();
      }
      pila.insertarElemento( carActual );
   }
                       
   else
      postfija += carActual;
   }
   
   // Caso base
   if( infija.length == 1 )
   {
      while( !pila.estaVacia() )
         postfija += pila.eliminarElemento();
   
      return postfija;
   }
   else
      // Corremos una letra de la expresion infija
      return aPostfija( infija.substring( 1 ), pila, postfija );
}

Pero aun asi el algoritmo sigue usando la pila, pero yo tenia entendido que las pilas se usan para simular la recursividad, recuerdo que siempre me decian esto :
"Si quieres convertir un algoritmo recursivo en iterativo usa pilas", osea como que la recursividad y las pilas son excluyentes , no pueden estar en un mismo algoritmo, corrigeme porfa si es que estoy mal, en resumen cuando el profe me dijo que tenia que convertir el algoritmo que hicimos en clase en uno recursivo yo pensaba que teniamos que hacerlo pero sin usar la pila, ya que la recursividad usa la pila implicitamente. Ojala que me haya dejado entender =(

Recursividad

Hola. Creo que hay un mal entendido sobre el concepto de recursividad. En matemáticas un función recursiva tiene la forma (a grandes rasgos, porque hay otras formas similares):

f(n)=cte f(n-1)

En español: recursividad es cuando una función se llama a sí misma directa o indirectamente. Esto se traslada al lenguaje JAVA a través de métodos, ya que de alguna manera un método es una función. Así, cuando un método se llama a sí mismo , entonces estás usando recursión.

El código que tu muestras arriba, por el sólo hecho de que el método aPostfija se llame a sí mismo, significa que es recursivo, esto es independiente de si usa pilas o no. (por cierto no he visto si funciona o no, que sería otra cosa)

Por otro lado, lo que tú dices "Si quieres convertir un algoritmo recursivo en iterativo usa pilas" de entrada, no es necesariamente cierto y tampoco significa que las pilas no se usan en recursividad. Tú puedes convertir un algoritmo recursivo en iterativo y no usar pilas. Usar pilas solamente es una sugerencia de como se podría hacer iterativo. Esa frase entre comillas te sugiere como ir de recursivo a iterativo pero no te impone ninguna restricción sobre recursividad.

Creo que tu problema es que como tu maestro usó pilas en un método iterativo y te está pidiendo que lo hagas diferente (recursivo), entonces tú quieres quitar la pila. No, lo que tienes que hacer es algo como lo que escribiste arriba, es decir, llamar desde el método aPostfija al mismo método aPostfija.

Saludos

Imagen de XinefPro

Al parecer yo tenia un mal

Al parecer yo tenia un mal concepto de lo que es la recursividad, pero con lo que escribiste ya me quedo todo claro, creo que ya no tendre problemas con teoria sobre recursividad.
Gracias por la ayuda eh, me ha servido muchiiiiiisimooo....!!!! xD

Nodos y Listas

La verdad estoy un poco confundida con estos temas ya que para mi es algo muy parecido tanto el codigo como la explicacion que da la profe!!! me gustaria saber un cocepto diferente.
Gracias

Ayuda

Hola amigos soy nuevo en este foro, un amigo me lo recomendo, necesito ayuda. Estoy en el tema de Pilas deseo q me ayuden con el codigo en java que convierta una expresion de formato infijo a postfijo. es decir ejemplo: que se ingrese: (a + j - h) / (s - u) y devuelva : aj+h-su-/ Agradecere bastante x esta ayuda es un trabajo q tengo q presentar. Gracias por su atención
x cualquier aviso : robertel99@hotmail.com

como desbloquear codigo fuente de sistema en java

hace ya un buen tiempo realice como tarea academica a dicho codigo y sistema para evitar su copado sin mi autorizacion le psue bloqueo lo que no recuerdo como lo hice ahora que necesito usarlo para un sistema mas grande no puedo usarlo.... si alguien sabe como hacerlo o herramienta a usar si me pueden ayudar se los estare eternamente agradecido enviar a este mi correo: ingncisneros@hotmail.com

Imagen de rodrigo salado anaya

WTF???

Trelvis y Ncisnerosav
1. Creen un nuevo post para sus preguntas.
2. Lean http://www.javamexico.org/tema/lineamientos_de_publicacion
3. Pongan en practica el punto 2.
4. Compartan el avance que llevan dando formato a su código y/o explicando claramente sus puntos.
5. Regresen a compartir sus avances, nuevas dudas y por supuesto su solución (en lo posible y legal claro)
Usen los buscadores en internet como Google y Bing.

pregunta sobre las funciones

como defines a tus funciones ,esMayorPrioridad,esUnOperador,mirarCima()
entindo q algunas son booleanas pero cual es su estructura