0

配列と目標 (数値) が与えられた場合、配列から要素を追加することで目標を達成できるかどうかを判断する必要があります。ここに私のコード(JavaScript)といくつかの結果があります:

function check(goal,array) {

  function add(sum, array) {
    if (sum == goal)
      return true;
    else if ((sum > goal)||(!array[0]))
      return false;
    else
        console.log(sum); // check where we are 
      return add(sum + array.shift(),array) || add(sum,array);
  }
  return add(0,array);
}

check(6,[1,3,5]) を呼び出した後に add() のスタックに起こると予想されること

add(0,[1,3,5])   // log 0
    add(1,[3,5])    //log 1  
        add(1+3,[5])    //log 4
            add(1+3+5,[])  //return false
            add(1+3,[])    //return false
        add(1,[5])  //log 1
            add(1+5,[])   //return true
            add(1,[])       

    add[0,[3,5])
        add(0+3,[5])
            add(0+3+5,[])
            add(0+3,[])
        add(0,[5])  
            add(0+5,[])
            add(0,[])

実績:

check(6,[1,3,5])
false
0
1
4
check(3,[1,3,5])
false
0
1
1

最初のブランチから離れることはありません。なんで ? 編集: わかりました、提案に基づいて、引数として配列を渡さない方が良いと思います:

function check(goal,array) {

  function add(sum, i) {
    if (sum == goal)
      return true;
    else if ((sum > goal)||(i==array.length))
      return false;
    else
        console.log(sum);
      return add(sum + array[i],i+1) || add(sum,i+1);
  }
  return add(0,0);
}

ここではうまく機能します。

4

1 に答える 1