2012-10-27 2 views
5

私はまた、私が見直したいくつかの他の記事に表示される次の機能についています。Eloquent JavascriptのfindSequence解説

このリンクにも記載されています。上記の説明で

Javascript..totally lost in this tutorial

答えが代わりに11の目標を設定しようと、彼らは、最初の11に対してテストされる1の開始、次いで11に対して試験された6の開始を持っています

私はこれらの最初の2つのステップを理解しています。しかし、私は第2ステップ(start:6をgoal:11と比較)から第3ステップ(start:3をgoal:11と比較)への飛躍を理解していません。

どのようにstartが6に戻り、3に戻ってから11に戻る(4番目の箇条書き)か?

+0

英語は私の最初の言語です。 –

+0

このポストの説明は非常に便利です。そのため、代わりにリンクを提供しました。 – KMcA

+1

この回答を確認してください - 多分それは明らかにすることができます。 http://stackoverflow.com/questions/7540111/javascript-closure-tutorial-from-eloquent-javascript?lq=1 – c69

答えて

7

ここでは、コンソールログステートメントで拡張されたコードのバージョンを示します。 Chromeを開き/オペラ/ Firefoxのeveloperツールとそこにこのコードを実行します。

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)); 

あなたはこのプログラムの呼び出しのトレースを取得し、うまくいけばトレースを見ることで、視覚的に再帰の概念を把握します。

+0

私は彼がコンセプトを理解するのに役立つだろうと同意しますが、彼のコメントによって私は彼の混乱が' || 'にあると言います。 – pedrofurla

+0

これはまさに私が見る必要があり、私の質問に完全に答えるものです。どうもありがとうございました。 – KMcA

+1

pedrofurlaなので、左側が最終的にnullを返すので、falseであり、右端が開始されます。正しい? – KMcA