Problemas con recursividad

Hola hola!!

Tengo un backtracking que como resultado en cada recursión guarda en un
fichero un objeto de tipo Tablero. Este tipo de objetos se guardan en un
array. Pero al retornar al programa principal solo obtengo la ultima de
las soluciones encontradas y no todas. Supongo que es por el tema de las
referencias ya que las soluciones se hacen probando bajo el mismo
objeto.
Creo que debo de clonar y guardar ese clonado en lugar del objeto que va
cambiando a cada recursión. ¿Cómo lo puedo hacer?

Gracias!

jabberID: [email protected]
blog: http://blog.geekcoders.net

On Dec 13, 2007, at 11:04 PM, Hector Muñoz wrote:

Creo que debo de clonar y guardar ese clonado en lugar del objeto
que va
cambiando a cada recursión. ¿Cómo lo puedo hacer?

Sin mas detalles del tema, parece que estas compartiendo los objetos
entre llamadas de alguna manera, por ejemplo pasandolo como argumento
a la llamada recursiva.

Posiblemente suceda lo que ya imaginas, las variables que almacenan el
objeto son (supongo) locales al metodo, pero si almacenan un objeto
mutable y le cambias el estado todo el stack de llamadas ve lo mismo
porque en Ruby como en Java almacenas referencias a objetos.

Una solucion a eso, asi hablando en general, es en efecto trabajar con
copias. Por ejemplo, si se trata en el tablero de mover piezas, en
lugar de moverlas en la referencia misma, tendrias algo asi

tablero = tablero.new_moving(…)

que instanciaria un nuevo tablero, clonaria el estado teniendo en
cuenta los movimientos, y devolveria esa nueva referencia.

Esto te sirve?

– fxn

On Dec 13, 2007 7:04 PM, Hector Muñoz [email protected] wrote:

Tengo un backtracking que como resultado en cada recursión guarda en un
fichero un objeto de tipo Tablero. Este tipo de objetos se guardan en un
array. Pero al retornar al programa principal solo obtengo la ultima de
las soluciones encontradas y no todas. Supongo que es por el tema de las
referencias ya que las soluciones se hacen probando bajo el mismo objeto.
Creo que debo de clonar y guardar ese clonado en lugar del objeto que va
cambiando a cada recursión. ¿Cómo lo puedo hacer?

Me pasaba algo parecido y lo solucioné con:

def resolver(t)

resolver(t.clone)
end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs