J'essaie d'écrire un programme récursif où l'appel de fonction suivant est basé sur les données de l'itération précédente.Récursivité dans node.js
Pour vous donner une idée de ce que je suis en train de faire:
vous commencez au point un et vous êtes intéressés où vous pouvez aller à partir de ce point, de sorte que l'algorithme recherche pour une destination possible b, maintenant vous vous voulez recommencer l'algorithme avec le point de départ b jusqu'à ce que vous atteigniez un deadend, à partir de là vous revenez un peu en arrière pour voir si vous pouvez aller n'importe où ailleurs et ainsi de suite.
À chaque itération, je sauve la façon dont je suis allé, donc à la fin, j'ai un réseau complet d'endroits où je peux aller.
Le problème est que je ne sais pas comment gérer les récursions de ce type dans node.js.
EDIT: Je résolu le problème et l'initialisation d'autres problèmes. Le programme s'exécute sans erreur maintenant mais il y a un problème que je ne comprends toujours pas: La variable "nodecounter" semble être réinitialisée à chaque itération de la boucle for de la fonction "separation". Si vous exécutez le programme maintenant, vous verrez comment les 4 premières lignes de mon tableau sectornodes sont remplies puis, après avoir frappé un deadend (en revenant à la première boucle for), il est écrasé au lieu d'ajouter de nouvelles lignes. Le "testarray" d'un autre côté ne perd pas les changements que "récursion" a fait en lui. Est-ce que quelqu'un voit le problème?
//testarray [startpoint, endpoint, marker] the marker defines if i have already visited a node (1) or not (0)
var testarray = [
[2323, 2324, 0],
[2326, 2322, 0],
[2324, 2328, 0],
[2322, 2321, 0],
[2321, 2322, 0],
[2328, 2324, 0],
[2324, 2323, 0],
[2329, 2326, 0]
];
var separation = function(testarray){ //main function to start the recursion
var sectornodes = []; // array with the results
var sectorcounter = 0; // counts the different sectors which are independent from each other
var nodecounter = 0; //counts the nodes (in order to fill my array)
for (var i=0; i < testarray.length; i++){
sectornodes[i] = [];
}
for (var i=0; i < testarray.length; i++){ //check all start point
if (testarray[i][2] == 0){ //if we havent visited this place before ...
console.log(sectorcounter);
recursion(testarray[i][0], testarray, sectornodes, nodecounter, sectorcounter); //start the recursion with this node
sectorcounter++; //after every iteration of the loop we enter a new sector
}
}
console.log(sectornodes);
}
var recursion = function(node, testarray, sectornodes, nodecounter, sectorcounter){
for (var j=0; j<testarray.length; j++){ //check every start point if he matches our node...
if (testarray[j][0] == node && testarray[j][2] == 0){ //...if he does and we havent visited it before, ...
sectornodes[nodecounter][0] = sectorcounter; //...we add the route to our array...
sectornodes[nodecounter][1] = testarray[j][0];
sectornodes[nodecounter][2] = testarray[j][1];
console.log(sectornodes);
nodecounter++; //...and raise the line counter
testarray[j][2] = 1;
//console.log(testarray); //output for debugging: the array should gain a 1 in the 3rd argument for every iteration
recursion(testarray[j][1], testarray, sectornodes, nodecounter, sectorcounter); //now we start again with the end node to see where we can get from there on
}
}
console.log('deadend'); //output for debugging: output whenever a path hits a deadend (no further place where you havent been before)
}
separation(testarray);
« * Quelqu'un peut-il me donner le corps d'un code comme ça? * "Non. Postez vos tentatives (et vos recherches) d'abord. –
Voilà, mon code jusqu'ici. Chaque fois que je recherche la récursivité, les données utilisées dans les exemples ne dépendent pas de sorte qu'il n'est pas comparable à mon problème. Mais je regarde toujours. – user3599232