2012-10-27 9 views
5

Ich bin auf der folgenden Funktion stecken, die in ein paar andere Beiträge erscheint, die ich auch überprüft habe.Eloquent Javascript findSequence Klärung

function findSequence(goal) { 
    function find(start, history) { 
    if (start == goal) 
     return history; 
    else if (start > goal) 
     return null; 
    else 
     return find(start + 5, "(" + history + " + 5)") || 
      find(start * 3, "(" + history + " * 3)"); 
} 
    return find(1, "1"); 
} 

print(findSequence(24)); 

Auch in diesem Link angegeben.

Javascript..totally lost in this tutorial

In der obigen Erläuterung, versuchte die Antwort stattdessen ein Ziel von 11. Sie haben von 1, einen Anfang zu setzen, die zunächst gegen 11 getestet wird, und dann ein Start von 6, die gegen 11 getestet

Ich verstehe diese ersten zwei Schritte. Ich verstehe jedoch nicht den Sprung vom 2. Schritt (Vergleich start: 6 bis goal: 11) mit dem dritten Schritt (Vergleich start: 3 bis goal: 11).

Wie geht start von 6, zurück bis 3 und dann wieder bis 11 (vierte Kugel)?

+0

Englisch ist meine erste Sprache. –

+0

Diese Erklärung in der Post ist sehr nützlich, weshalb ich den Link stattdessen zur Verfügung gestellt habe. – KMcA

+1

überprüfen Sie diese Antwort - vielleicht kann es klären. http://stackoverflow.com/questions/7540111/javascript-closure-tutorial-from-eloquent-javascript?lq=1 – c69

Antwort

7

Ok, hier ist eine Version des Codes, der mit Konsolenprotokollanweisungen erweitert wurde. Öffnen Sie Chrome/Opera/Firefox eveloper Tools und diesen Code dort ausführen:

function findSequence (goal) { 
    function find (start, history, depth) { 
    depth = depth || 0; 
    console.log(Array(++depth).join('--> '), start, goal, history); 
    if (start == goal) { 
     console.warn('history'); 
     return history; 
    } else if (start > goal) { 
     console.error('null'); 
     return null; 
    } else { 
     console.info('recursion!'); 
     return find(start + 5, "(" + history + " + 5)", depth) || 
      find(start * 3, "(" + history + " * 3)", depth); 
    } 
    } 
    return find(1, "1"); 
} 

console.info(findSequence(24)); 

Sie erhalten eine Anrufverfolgung dieses Programms erhalten, und hoffentlich das Konzept der Rekursion visuell wird erfassen, indem Sie auf die Spur suchen.

+0

Ich stimme zu, dass dies ihm helfen wird, das Konzept zu verstehen, aber durch seine Kommentare würde ich sagen, dass seine Verwirrung im' || 'liegt. – pedrofurla

+0

Genau das musste ich sehen und beantworte meine Frage perfekt. Vielen Dank. – KMcA

+1

pedrofurla, so, da die linke Seite schließlich null zurückgibt, ist es falsch und löst die rechte Seite aus, um zu beginnen. Richtig? – KMcA