Recursividad en Visual FoxPro 9

838 views
Skip to first unread message

Patagonia

unread,
Oct 28, 2010, 11:01:21 PM10/28/10
to Comunidad de Visual Foxpro en Español
Alguien tiene idea si es posible utilizar llamados recursivos a un
procedimiento o un método?

Walter R. Ojeda Valiente

unread,
Oct 29, 2010, 1:11:16 AM10/29/10
to publice...@googlegroups.com
Sí, claro que se puede.

Por supuesto, no olvides que la recursión debe terminar alguna vez, debes asegurarte de poner una condición de fin.

Saludos.

Walter.

Walter R. Ojeda Valiente

unread,
Oct 29, 2010, 2:09:04 AM10/29/10
to publice...@googlegroups.com
Te paso un ejemplo, la famosa función recursiva para hallar el factorial de un número.

Como sabes, el factorial de un número natural es ese número multiplicado por cada uno de los números naturales anteriores a él. Por ejemplo:
1! = 1
2! = 1 * 2
3! = 1 * 2 * 3
4! = 1 * 2 * 3 * 4
5! = 1 * 2 * 3 * 4 * 5
6! = 1 * 2 * 3 * 4 * 5 * 6
etcétera


MAIN.PRG
------------
? Factorial(6)

Return
*
*
Function Factorial
LParameters tnNumero
Local lnResultado
 
  if tnNumero <= 1
    lnResultado = 1
  else
    lnResultado = tnNumero * Factorial(tnNumero - 1)
  endif
 
Return(lnResultado)
*
*

Carlos Miguel FARIAS

unread,
Oct 29, 2010, 6:08:16 PM10/29/10
to publice...@googlegroups.com
Con configuración estandar, no es muy aconsejable usar algoritmos recursivos en VFP, ya que solo admite un maximo de 128 llamadas, contando desde el main (cualquier aplicación tiene activos dos o tres niveles minimo).
Si se puede configurar el VFP cuando arranca para que maneje hasta 64000 niveles.

en el config.fpw, pones

STACKSIZE = nValue

donde nvalue va de 32 a 64000

Recursivamente: Miguel

361.gif

Walter R. Ojeda Valiente

unread,
Oct 29, 2010, 6:33:50 PM10/29/10
to publice...@googlegroups.com
Hola Carlos Miguel

Es cierto, pero 128 niveles suelen ser más que suficientes para la gran mayoría de los algoritmos recursivos. En la época que programaba en Pascal y en C utilicé mucho la recursividad y jamás (que yo recuerde) la función recursiva fue llamada tantas veces.

Saludos.

Walter.

361.gif

Carlos Miguel FARIAS

unread,
Oct 29, 2010, 6:47:10 PM10/29/10
to publice...@googlegroups.com
Si Walter, tienes razon que en algoritmos matematicos numericos muchas veces no llegas a muchas llamadas, depende que estes calculando, pero cuando tenes que recorrer estructuras arboreas complejas o un simple heapsort, con una lista "no de ejemplo", si no en serio, las llamadas recursivas pueden ser muchas, por supuesto que no llegarias a 64000, pero generando numeros primos grandes, algunas veces ese limite los pasa.
Igualmente, ante un algoritmo recursivo, hay que ver si no se puede resolver con un iterativo, no es "tan elegante" pero es mas rápido.
Saludos: Miguel

Walter R. Ojeda Valiente

unread,
Oct 29, 2010, 7:19:40 PM10/29/10
to publice...@googlegroups.com
Hola Miguel

Todos los problemas que pueden resolverse recursivamente también pueden resolverse iterativamente, para cada caso el analista o el programador debe decidir cual de ambas alternativas le resulta la más adecuada. La recursividad es una herramienta más y como tal debe utilizarse cuando sea la mejor opción.

En muchos casos, una función recursiva de pocas líneas es el equivalente a una función no recursiva de muchísimas líneas.

Por eso, saber cuando y donde utilizarla, puede ahorrarnos mucho tiempo (y dinero). Como dije antes, es una herramienta más, un buen programador debe conocerla bien.

Saludos.

Walter.

Carlos Miguel FARIAS

unread,
Oct 30, 2010, 7:35:43 AM10/30/10
to publice...@googlegroups.com
Exacto.

Patagonia

unread,
Oct 31, 2010, 9:16:24 PM10/31/10
to Comunidad de Visual Foxpro en Español
Gracias por el aporte de todos!!! Realmente han contestado con creces
mi pregunta y he resuelto el problema...
Pero...
para Walter Ojeda:
Mi problema, te puedo asegurar que solo se resuelve con llamados
recursivos a una tabla. No veo la forma de resolverlo con iteraciones.
Gracias.

Walter R. Ojeda Valiente

unread,
Oct 31, 2010, 11:15:11 PM10/31/10
to publice...@googlegroups.com
Hola Patagonia

Todos los problemas que pueden resolverse recursivamente también pueden resolverse iterativamente. Todos. Quizás tú no veas como, pero eso es otra cosa. De que se puede, se puede.

De todas maneras, si sabes resolverlo recursivamente, ya está bien.

Saludos.

Walter.

marcelobuenosaires

unread,
Nov 1, 2010, 12:36:28 AM11/1/10
to publice...@googlegroups.com
Hola amigos

Alguien tiene por ahi, codigo o un enlace
que me permita RECIBIR SMS en la PC
utilizando VFP ?

He visto una docena de ejemplos...
Los de ENVIAR funcionan pero los de RECIBIR... NO

Saludos
MarceloBuenosAires

marcelobu...@gmail.com

unread,
Nov 1, 2010, 9:45:04 AM11/1/10
to publice...@googlegroups.com
Ah...

Olvide agregar...
conectando un telefono celular a la PC

Saludos
_________________

Carlos Miguel FARIAS

unread,
Nov 1, 2010, 4:02:59 PM11/1/10
to publice...@googlegroups.com
Los algoritmos recursivos tienen una simplicidad mucho mayor que su equivalente iterativo, por eso ambos tienen razon.  Patagonia no encontro otra solución posible, que si hubiese tenido mas tiempo y no estar apretado por encontrar una solución  hubiese podido resolverlo en forma iterativa.
Un ejemplo de algoritmo recursivo es esta entrada en el diccionario.

Recursividad: vease Recursividad.
35D.gif
35F.gif
35C.png
361.gif

Walter R. Ojeda Valiente

unread,
Nov 1, 2010, 4:24:43 PM11/1/10
to publice...@googlegroups.com
Hola Miguel

Es cierto lo que dices, los algoritmos recursivos son más cortos (a veces mucho más cortos) que sus equivalentes no recursivos.

Pero para que funcionen siempre deben tener una condición de fin, en algún momento esa condición debe cumplirse para terminar con la recursividad. Algo que en tu ejemplo de entrada en el diccionario no ocurre.

Saludos.

Walter.

35D.gif
35F.gif
35C.png
361.gif

Victor Espina

unread,
Nov 1, 2010, 6:50:16 PM11/1/10
to Comunidad de Visual Foxpro en Español
Los algoritmos recursivos son hermosos en su simpleza, pero no son
faciles de entender ni de depurar. Aun asi, los aplico cada vez que
puedo.

Saludos

Victor Espina
>  35D.gif
> 2 KVerDescargar
>
>  35F.gif
> < 1 KBVerDescargar
>
>  35C.png
> < 1 KBVerDescargar
>
>  361.gif
> < 1 KBVerDescargar

Walter R. Ojeda Valiente

unread,
Nov 1, 2010, 7:16:21 PM11/1/10
to publice...@googlegroups.com
Hola Víctor

Eso depende, hay algunas personas a quienes les resulta fácil pensar recursivamente, aunque para la gran mayoría es difícil.

En mi caso fue cuestión de práctica. Al principio los algoritmos recursivos me parecían difíciles y complicados de entender, pero luego de ver los códigos fuente de otros programadores y de resolver varios problemas usando recursividad me resultaron muy sencillos.

El problema que hizo que "se me prendiera la lamparita" y empezara a entender la simpleza y sencillez de la recursividad fue el de colocar 8 damas de ajedrez en el tablero.

El tablero de ajedrez consiste de 8 filas y 8 columnas, haciendo un total de 64 casillas. Las damas (también llamadas reinas) del ajedrez pueden moverse cualquier número de casillas libres en forma horizontal, vertical o diagonal. El problema consiste en colocar 8 damas de tal manera que en ninguna línea horizontal, vertical o diagonal de una dama se encuentre otra dama. En términos ajedrecísticos, que ninguna dama pueda capturar a otra dama.

Mi programa preguntaba en que casilla se encontraba una dama y a partir de allí calculaba la ubicación de las 7 restantes. Ejecutando ese programa descubrí que si colocas una dama en una esquina, el problema no tiene solución.

Yo había resuelto ese problema haciendo un programa pero sin usar recursividad. Luego se me ocurrió que era ideal para ser encarado con un algoritmo recursivo. Hice eso y la diferencia en la cantidad de líneas escritas fue tremenda. Un poco más de una página usando recursividad y más de 12 sin usarla. Desde ese día me enamoré de la recursividad y aprendí a usarla.

Saludos.

Walter.

Carlos Miguel FARIAS

unread,
Nov 2, 2010, 8:49:20 AM11/2/10
to publice...@googlegroups.com
El ejemplo del diccionario, como es algo manejado por personas, la condicion de fin es implicita, corta cuando se termina la paciencia del lector. .
Si es cierto, hay algoritmos recursivos que son extremadamente "limpios", poco codigo, relativamente rápidos si el compilador es bueno, y preferibles de ser posible a sus soluciones iterativas, que suelen ser largas y complejas.
1E3.gif
361.gif

sergio alejandro garcia mendez

unread,
Nov 3, 2010, 9:52:44 PM11/3/10
to publice...@googlegroups.com
Tenes los link de donde viste como enviar mensajes a telefonos celulares

El 31/10/10, marcelobuenosaires <marcelobu...@gmail.com> escribió:

--
Enviado desde mi dispositivo móvil

Sergio A. Garcia
mail tayi...@gmail.com
alt. tayi...@yahoo.com

marcelobuenosaires

unread,
Nov 3, 2010, 10:18:55 PM11/3/10
to publice...@googlegroups.com
Justamente
los de RECIBIR no funciona ninguno

Por eso, consulto

Gracias
MarceloBuenosAires
___________

El 03/11/2010 10:52 p.m., sergio alejandro garcia mendez escribi�:


> Tenes los link de donde viste como enviar mensajes a telefonos celulares
>

> El 31/10/10, marcelobuenosaires<marcelobu...@gmail.com> escribi�:

IVAN MARTINEZ

unread,
Nov 3, 2010, 10:42:08 PM11/3/10
to publice...@googlegroups.com

Tengo estos documentos sobre sms.

Ivan Martinez

>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de
>>>marcelobuenosaires
>>>Enviado el: Miércoles, 03 de Noviembre de 2010 09:49 p.m.
>>>Para: publice...@googlegroups.com
>>>Asunto: Re: [vfp] RECIBIR SMS en VFP


>>>
>>>Justamente
>>>los de RECIBIR no funciona ninguno
>>>
>>>Por eso, consulto
>>>
>>>Gracias
>>>MarceloBuenosAires
>>>___________
>>>

>>>El 03/11/2010 10:52 p.m., sergio alejandro garcia mendez escribió:
>>>> Tenes los link de donde viste como enviar mensajes a telefonos
>>>> celulares
>>>>
>>>> El 31/10/10,

>>>marcelobuenosaires<marcelobu...@gmail.com> escribió:

Envío de Mensajes SMS desde Fox.htm
Kylix SMS ActiveX home.htm

Moises Daniel Vilchez Tello

unread,
Nov 4, 2010, 1:00:03 PM11/4/10
to publice...@googlegroups.com
Interesante el articulo del compañero Ivan Martinez, alguien lo a probado para equipos de telefonia en  Peru ?? si tuvieran mas material se agradeceria, saludos


Moises Daniel Vilchez Tello
Chiclayo - Lambayeque - Peru

marcelobu...@gmail.com

unread,
Nov 4, 2010, 1:42:42 PM11/4/10
to publice...@googlegroups.com
El ejemplo utiliza el Hyperterminal
y el otro es PAGO

Lo que yo quisiera es utilizar solo VFP y
la libreria MsComm32.Ocx de Windows

Saludos
____________
Reply all
Reply to author
Forward
0 new messages