2017-02-16 4 views
0

starthistoryはどのように値を取得しますか?どこから来たの?私はこのLINKを読んでいます。2番目の関数はどのようにデータを取得しますか?

誰かがそれを説明してください。私はいくつかを切り取らしまし

出力

(((1 * 3)+ 5)* 3)

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

 
console.log(findSolution(24));

+2

ここから 'return find(1、" 1 ");'。 'findSolution'が呼び出されると、内部関数がこのステートメントによって呼び出されます。 – Tushar

+2

'start'と' history'は 'find(start、history){...}'関数の引数です。 'find()'が呼び出されるたびに、値が 'find(1、" 1 ")'のように渡されます。 – nnnnnn

+0

私は間違っている場合は私を修正します。 'findSolution'は内部関数を返すことができますか?コードのように? – KiRa

答えて

2
function findSolution(target) { 
    function find(start, history) {  // <--- NOTICE DECLARATIONS HERE 
     /* SNIP */ 
     return find(start + 5, "(" + history + " + 5)") || 
      find(start * 3, "(" + history + " * 3)"); 
    }  // ^--- FUNCTION CALLS HERE 
    return find(1, "1"); // <--- AND HERE 
} 

console.log(findSolution(24)); 

このクエストに無関係な詳細いくつかのコメントを挿入しました。ご覧のとおり、関数findは、質問のstarthistoryという2つの引数で宣言されています。 findの値として1が最初に呼び出され、historyの値としてと"1"の値が呼び出されます。この後、find関数は、これらの引数の新しい値で再帰的に自身を呼び出します。

関連する問題