Computación evolutiva y recursividad

Leí un par de artículos de la computación evolutiva, y he decidido hacer un programilla javascript con ello. Lo que pasa es que me he atrancado en una function recursiva. Esta más o menos hecho con objetos. He simplificado mucho el código centrándome en el problema:
<script>
function Opers(nom) { //clase persona
this.nom=nom;
this.hijos=new Array();
}
function e(t) { document.write(t); }
paco=new Opers("paco");
Nhijo(paco); //paco_0
Nhijo(paco.hijos[0]);
Nhijo(paco); //paco_1
Nhijo(paco.hijos[1]);
Nhijo(paco); //paco_2
//Nhijo(paco.hijos[2]);
//Nhijo(paco) //paco_3
//Nhijo(paco) //paco_4
vez=true;
function hallarUltGen(de) {
e("<p>Trabajamos con <b>"+de.nom+"</b>:<br>");
if(vez) { //la primera vez que se ejecuta.
dev=new Array();
e("Empezando:<br>")
vez=false;
}
if(de.hijos.length==0) { //si no tiene hijos, el es el ultimo. Terminar funct
dev[dev.length]=de;
e("No tiene hijos, añadido a dev.<br>");
}
else{ //si tiene ijos
e("Tiene hijos, "+de.hijos.length+":<br>");
for(a=0;a<de.hijos.length;a++) { //por cada hijo hallar ultGen y terminar la function
e("Llama a la function hallarUltGen con <b>"+de.hijos[a].nom+"</b>:<br><blockquote>")
hallarUltGen(de.hijos[a]);
e("</blockquote>");
}
}
}
vez=true;
hallarUltGen(paco);
e("<p><p>"+dev.length+" ultimos en generacion.")
</script>
Me voy a explicar un poco porque el código es bastante txungo:
Opers es la function para definir los objetos persona, con propiedad nom (nombre) e hijos (array con los objetos Opers del padre). Bueno en esta tontería solo hay un padre, pero bueno, se puede comprender.
hallarUltGen(de) mete en el array llamado dev los objetos Opers últimos digamos en el árbol genealógico del objeto indicado en el argumento 'de'. Se apoya en 'vez' que unicamente define cuándo se llama por primera vez (es recursiva, más que nada para inicializar dev).
La function e(t) es simplemente para ahorrarme escribir.
La cosa es que no funciona, se producen cambios raros. Algunas lineas cuando se crea el objeto Opers("paco") y sus hijos están comentadas. Obsérvese cuando se quitan los comentarios. Se produce un bucle infinito y no se porqué. Ademas si por ejemplo solo le ponemos a paco dos hijos(paco_0, paco_1), y al primero de éstos se le añade uno(paco_0_0), entonces no se muestra el segundo hijo de paco (paco_1), ni se añade a dev, como si se lo olvidase.
Sin duda alguna un reto para mi y para muchos programadores. Cuando lo finalice me gustaría pasarlo a C++, pero eso corre por mi cuenta je je.

1 Respuesta

Respuesta
-1
Me gustaría saber a que tipo de proyectos se puede aplicar esto
Veamos es simplemente un programita en el que el objeto Opers tiene genes, y tiene que comerse a otros objetos Ocomida por ejemplo.
Ocomida tiene una propiedad de ocultación, y Opers una propiedad de visión.
Los nuevos hijos de Opers evolucionaran visión hacia ocultación de Ocomida y los nuevos hijos de Ocomida evolucionaran ocultación a algo que no vean los Opers, es decir, lo más diferente a visión de Opers.
Es simplemente un programa evolutivo para ver los resultados, nada más.
Disculpa por no haber continuado con la pregunta. Lo que pasa es que quería saber algo del tema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas