2013-08-22 2 views
0

Je n'arrive pas à comprendre pourquoi ma recherche récursive ne se comportera pas récursivement.Quel est le problème avec ma boucle récursive JavaScript Search?

Voyez-vous ce qui ne va pas? Est-ce que j'ai un haystack[i] au mauvais endroit? Parce que je ne le vois pas. J'ai essayé de regarder des exemples sur ce site mais je n'arrive pas à trouver quelque chose d'aussi simple.

search = function(needle, haystack) { 

    len = haystack.length; 
    for (var i = 0; i < len; i++) 
    { 
     if (typeof haystack[i] == 'object') { 
      search(needle, haystack[i]) 
     } else { 
      if (needle == haystack[i]) { 
       console.log('found'); 
       return; 
      } 
      console.log('value: ' + haystack[i]) 
     } 
    } 
} 

var test = [[1], [2], [3,4], [5,6]] 
search(4, test) 

Ou voir le violon @http://jsfiddle.net/aniyishay/TBMmK/ (Ouvrez la console)

Répondre

3

Il vous manque var devant len, il devrait être var len = haystack.length; autrement elle est traitée comme une variable globale. Lorsque haystack = [[1], [2], [3,4], [5,6]] puis len = 4 mais à nouveau search(4, [1]) est appelé, alors len = 1 est assiégé puis, lorsque la boucle est retournée, la valeur de len = 1 au lieu de l'original 4 car il s'agit d'une variable globale. Maintenant i = 2 et len ​​= 1 donc la boucle existe

+0

@Doorknob oui ça va ... l'avez-vous testé –

+0

@Doorknob checkout http://jsfiddle.net/arunpjohny/qxfXb/1/ –

+0

Hm. C'est intéressant, pourquoi est-ce? (+1) Pourquoi est-ce important de changer la variable globale en variable locale? – Doorknob

Questions connexes