Page 1 of 1

Limite en la recursividad

Posted: Wed Nov 22, 2006 3:25 pm
by creswinman
Hola estoy utilizando rutinas recursivas para recorrer arboles genealogicos
http://www.genealogia.com.mx el problema es que cuando llamo a una rutina mas de 13 veces marca el error

EVAL STACK FAULT

Estoy usando blinker 7

Se supone que el blinker procedure depth 30
indicaria cuantas veces se pueden anidar procesos o funciones
la verdad es que si le pongo 0,30 o 100 se comporta igual
siempre truena en 15

Ejemplo de una rutina para pruebas

Code: Select all

TEST(0)

FUNCTION TEST()
PARAM n
n:=n+1
Msginfo(n)
Test(n)





Posted: Thu Nov 23, 2006 12:48 pm
by manuramos
La funcion está muy bien, pero tendràs que ponerle un limite a la recursividad para que no se ejecute indefinidamente, (varios miles de veces por segundo)

Por ejemplo:

IF n < 31
Test(n)
ENDIF
RETURN (n)

Además, a cada vez que entras te crea el PARAM n (unos pocos de miles), mucho uso de memoria.
Porqué no creas una sola varable "n" y la pasa por referencia. O una variable PUBLICa que no tiene que pasar ni por parámetro ni nada. Mucho ahorro de memoria y la recursividad puede ser indefinida sin aumentar la memoria (creo que ahí está tu problema).

Un saludo.