Código recursivo
Publicado por SebasSBM (20 intervenciones) el 31/08/2007 16:42:25
He hecho un programa cuyo código es recursivo, y eso provoca la saturación de la pila de llamadas:
Option explicit
Private Borrar (1 to 36)as Variant, BorrarA as Variant
[...]
Public Sub Blanquear()
[...] ' Este procedimiento asigna aleatoriamente los valores de la matriz Borrar (entre el 1 y el 81)
Call Cuadrar
End Sub
Public Sub Cuadrar()
For Each BorrarA in Borrar
Line1: If BorrarA=1 and BorrarA=2 or BorrarA=1 and BorrarA=3[...] _ 'establezco ciertas normas sobre la elección de números aleatorios
Then Goto Line2 Else Call Blanquear 'Si no se cumplen las normas, selecciona otros números aleatorios, y así hasta que se adapten a las condiciones impuestas.
Line2: [...] ' Es similar a la anterior. Hay 27 líneas que siguen este mismo patrón. Si se cumplen todas las condiciones, llama a BlanquearB; si no, seguirá repitiendo el bucle.
[...]
End Sub
Public Sub BlanquearB()
[...]
End Sub
[...]
Debido a lo restrictivas que son las condiciones que el programa requiere, llama a los procedimientos Blanquear() y Cuadrar() tantas veces que satura la pila de llamadas. ¿Existe alguna forma de evitar dicha saturación, conservando estas funciones? No puedo juntarlos en un solo procedimiento, ya que sería demasiado largo.
Option explicit
Private Borrar (1 to 36)as Variant, BorrarA as Variant
[...]
Public Sub Blanquear()
[...] ' Este procedimiento asigna aleatoriamente los valores de la matriz Borrar (entre el 1 y el 81)
Call Cuadrar
End Sub
Public Sub Cuadrar()
For Each BorrarA in Borrar
Line1: If BorrarA=1 and BorrarA=2 or BorrarA=1 and BorrarA=3[...] _ 'establezco ciertas normas sobre la elección de números aleatorios
Then Goto Line2 Else Call Blanquear 'Si no se cumplen las normas, selecciona otros números aleatorios, y así hasta que se adapten a las condiciones impuestas.
Line2: [...] ' Es similar a la anterior. Hay 27 líneas que siguen este mismo patrón. Si se cumplen todas las condiciones, llama a BlanquearB; si no, seguirá repitiendo el bucle.
[...]
End Sub
Public Sub BlanquearB()
[...]
End Sub
[...]
Debido a lo restrictivas que son las condiciones que el programa requiere, llama a los procedimientos Blanquear() y Cuadrar() tantas veces que satura la pila de llamadas. ¿Existe alguna forma de evitar dicha saturación, conservando estas funciones? No puedo juntarlos en un solo procedimiento, ya que sería demasiado largo.
Valora esta pregunta


0