Ses une fonction qui s'appelle elle-même. Il est utile pour la marche de certaines structures de données qui se répètent, comme des arbres. Un DOM HTML est un exemple classique.
Un exemple de structure de l'arbre en javascript et une fonction récursive pour "marcher" l'arbre.
1
/ \
2 3
/ \
4 5
--
var tree = {
id: 1,
left: {
id: 2,
left: null,
right: null
},
right: {
id: 3,
left: {
id: 4,
left: null,
right: null
},
right: {
id: 5,
left: null,
right: null
}
}
};
Au pied de l'arbre, nous appelons la même fonction à plusieurs reprises, en passant les nœuds enfants du nœud courant à la même fonction. Puis on appelle la fonction de nouveau, d'abord sur le nœud de gauche, puis sur la droite.
Dans cet exemple, nous allons obtenir la profondeur maximale de l'arbre
var depth = 0;
function walkTree(node, i) {
//Increment our depth counter and check
i++;
if (i > depth) depth = i;
//call this function again for each of the branch nodes (recursion!)
if (node.left != null) walkTree(node.left, i);
if (node.right != null) walkTree(node.right, i);
//Decrement our depth counter before going back up the call stack
i--;
}
Enfin, nous appelons la fonction
alert('Tree depth:' + walkTree(tree, 0));
Un excellent moyen de comprendre la récursivité est à l'étape dans le code lors de l'exécution.