Récursion infinie en Flash

Posted on 23/10/2009 · Posted in Flash
1
2
3
4
5
6
public function fooLoop () : void
{
   //Pre traitement
   fooLoop ();
   //Post traitement
}

Voici le corps d’une fonction récursive.

Lorsque la pile est pleine, une jolie erreur du type StackOverFlowError est déclenchée.

Ce qui est intéressant de voir, c’est le comportement du Player et des navigateurs lorsque l’on traite cette erreur pour relancer la fonction récursive.

Voici le code utilisé :

1
 

Avec Windows, en utilisant IE le navigateur monte en charge en utilisant la mémoire. Ce qui a pour conséquence logique de remplir le fichier d’échange. Une fois que la mémoire disponible est sèche, un mécanisme que je n’explique pas libère de la mémoire et le script continu son exécution.

Contrairement à Firefox qui après 400Mo d’utilisation mémoire, se positionne en “Ne réponds pas…” et se freeze de lui même.

Si vous voulez voir ce que cela donne, voici l’application.
Pensez à surveiller l’utilisation de votre mémoire 😉
[SWF]http://www.armetiz.info/wp-content/uploads/2009/10/Recucivity.swf, 400, 100[/SWF]

L’interet

Outre le fait de pouvoir faire joujou, ce script peut-être intéressant pour réaliser des traitements récursifs qui sont justement trop importants.
En, effet, vous pouvez le combiner à une variable statique pour continuer le traitement lorsque l’erreur de débordement est déclenchée.