
06/01/2006, 10:59
|
| | Fecha de Ingreso: junio-2005 Ubicación: Argentina
Mensajes: 90
Antigüedad: 19 años, 9 meses Puntos: 2 | |
. Por un lado, desde un punto de vista teórico, cualquier procedimiento recursivo se puede convertir en iterativo, lo cual a veces puede ser conveniente en términos de recursos de la maquina, tiempo, y control de lo que uno está haciendo.
Por otro lado, en ciertos problemas el planteo recursivo es más deseable.
Sería bueno que digas qué librerias has usado para manejar la recursividad.
Aún así, la funcioncita que escribí me parece que es bien simple, no complicada, y que puede ayudar a salir del paso, y entender un poco como pueden resolverse este tipo de problemas, de reconocimiento de estructuras en una cadena de caracteres.
Pero tengo claro además que no es una solución del todo completa, y depende más que nada de lo que uno quiera hacer finalmente. Por eso hice hincapié en la ''idea'' de reconcoer los parentesis, y no en la funcion misma.
Más allá de todas estas cosillas, me parece que lo idóneo es meterse un poco en la teoría de los reconocedores sintácticos, que se usa para el desarrollo de compiladores.
Un libro antiguo que introduce ese tema a nivel básico es el famoso
de WIRTH, N.: "Algoritmos + Estructuras de Datos = Programas".
Está escrito en Pascal, pero es muy claro, así sin dificultad se puede pasar a C.
Me parece que todo lo que tenga que ver con reconocimiento de estructuras sintacticas debiera encaminarse por ese lado, teniendo en cuenta esa teoria, y poniendo atencion a las objeciones que WIRTH hace sobre los ''lenguajes'' que no presentan ''problemas'' (o sea, bien definidos, de manera tal que cuando lo implementamos en un programa, no caemos en loops infinitos o caminos sin salida).
Para salir del paso a la hora de reconocer funciones matematicas, es viable usar funciones de C caseras, que reconozcan los niveles de parentesis. Cuando se quiere hilar mas fino, conviene irse a la teoria de compiladores, que es bastante interesante y sistematica.
Uno pone las reglas, y lo demas se hace practicamente solo. Tal vez sea mas facil (por decirlo asi) hacer un compilador que alguna otra aplicacion demasiado especifica.
Tal vez lo recomendable seria definir una clase, o una familia de clases en C++, con las estrucutras y funciones basicas de un compilador de compiladores, mezclando las ideas del libro de WIRTH con la potencia del C++. |