Javascript : problème de variable dans une fonction récursive

En codant en javascript, je rencontrais un problème avec la variable « i » de mes boucles for qui changeait de valeur, ne s’incrémentait pas donc la boucle for s’arrêtait avant son arrêt prévu ou bien tournait indéfiniment.

Exemple :

La mauvaise façon de déclarer une variable i dans une boucle for dans une fonction récursive


function recursiveFunc(n)

{

    var res = 0;

    for(i =0; i< n; i++)

        res += recursiveFunc(n-1);

    return res;

}

C’est un exemple bidon de fonction récursive mais là n’est pas le problème.

Dans cet exemple, la variable i change quand on appellera recursiveFunc(n) qui va la setter à n-1 qui appelera recursiveFunc(n) qui va à son tour la setter à n-2 et ainsi de suite jusqu’à ce que i prenne la valeur à 0 et cause une boucle infinie.

Pourquoi ? Car i n’est pas déclarée avec le mot-clé « var » donc elle est devenue une variable statique de la fonction donc les appels récursifs à la fonction changent l’état de cette même variable.

C’était une bug assez bien caché et un peu difficile à diagnostiquer mais j’ai compris qu’il faut toujours déclarer mes index dans une boucle for avec le mot-clé « var » (et toute autre variable qui ne doit pas être statique bien sûr)

La bonne façon


function recursiveFunc(n)
{
    for(var i = 0; i < n; i++)
    {
    ...
    }
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *