Visual Basic - Código recursivo

Life is soft - evento anual de software empresarial
   
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Código recursivo

Publicado por ivan (1041 intervenciones) el 31/08/2007 18:36:15
pues revisando lo que ayer te contestaron y lo que ahora expones, siendo tu código recursivo es obvio que vas a reventar la pila por tantas llamadas a procedimientos que se quedan ahí.
no conocemos todo tu código, pero ¿estás seguro de que no hay manera de evitar dicha recursividad? rediseñando el procedimiento correctamente. lo digo porque si tienes llamadas recursivas que no finalizan significa que algo se diseñó mal.
también te aconsejaron que usaras Gosub dentro del mismo procedimiento y no tener que llamar a otro (call), pero dices que el problema es que quedaría muy largo ¿y qué tiene esto de problema, que quede muy extenso? si acaso eso te soluciona el evitar la recursividad, valdría la pena
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Código recursivo

Publicado por SebasSBM (20 intervenciones) el 31/08/2007 20:13:54
Sí, es muy posible que haya algo mal en el diseño. En cuanto a lo de GoSub, ya lo probé. A mi me da igual lo largos que sean los procedimientos, pero cuando es demasiado largo, me da error de compilación, y ese es el problema que me impide usar GoSub. La verdad, no sé cómo me lo voy a montar para arreglar esto, y, para que pudiérais ayudarme, parece que tendría que escribir medio programa aquí. Gracias de todos modos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar