2017-02-21 1 views
1

ので、私は雄弁JSから、このコードを持って:私の問題はヌルはこの再帰に何をするかである戻りヌル

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

を?我々はポイントを取得すると場所:

find(26, history) // start = 26, history = (1+5)+5)+5)+5)+5) 

それはヌルを返してstart > tagert文を打ちます。

次に何が起こりますか?

+0

呼び出し側が 'null'を取得しました。それが再帰呼び出しであれば、 '||'(論理的な)または 'findSolution'の最初のものであれば結果全体が' null'になります。 –

答えて

0

||演算子は、最初の呼び出しまたは2番目の呼び出しの結果を返すショートカットです。 findへの最初の呼び出しがnullを戻す場合、2番目の結果が戻されます。

この場合、Nullは、ターゲットに到達する方法が成功しなかったことを意味します。機能findSolutionは基本的に+ 5* 3のすべての組み合わせをターゲットに到達させようとします。

0

問題は、「または」(||)がヌル値であることです。

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

     } 
     return find(1, "1"); 
    } 

    console.log(findSolution(24)); 

その他のソリューション:

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

結果は次のとおりです。

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

私はそれを試してみるよ:

find関数は関係なく、2つの値を返すことができます。文字列履歴またはnullのいずれかです。停止条件:start == targetまたはstart > targetに到達すると、再帰呼び出し全体の結果になります。

ここで、再帰呼び出しごとに、最大で再帰呼び出しが2つ多く作成されることがあります。 find(start + 5, "(" + history + " + 5)")への呼び出しがヌルを返した場合(nullまたは履歴のみを返すことができることに注意してください)、find(start * 3, "(" + history + " * 3)")は履歴を返す別の試みとして実行され、2番目の呼び出しもnullを返した場合はnullが最終結果になります。

+0

私はここですべての答えを感謝したいと思いますが、この1つは私にとって非常に明確です。ありがとう。 – itsSajo

+0

私のポストに投票してください:) – artemisian