2016-06-21 17 views
1

私はコードの再帰を理解する上で問題があります。私はツリーをフォローしようとしましたが、途中で何かがわかりません。 誰かがコードスニペットを理解するのを手伝ってください。また、コードを完全に理解できるように、ページや塗装などのソフトウェア、再帰ツリーを描くことができますか?Java - SubSet Sum Recursion再帰の描画

なぜ2回の再帰がありますか? 2回目の再帰がどのように機能するのか分かりません(||の後ろ)。

public static boolean hasSum(int[] array, int start, int sum) { 
    if (sum == 0) 
     return true; 

    if (start > array.length - 1) 
     return false; 

    return hasSum(array, start + 1, sum - array[start]) 
      || hasSum(array, start + 1, sum); 

} 

Example painted treeは、いずれかの現在の要素を含めることができ

答えて

2

ザ・(すなわちsum)サブセット合計を検索あなたの助けをありがとうございました(それゆえ||)(array[start]含みません現在の要素

array[start]が含まれている場合は、添え字start+1で始まるサブ配列のサブセットがsum - array[start]であることがわかります。

これはhasSum(array, start + 1, sum - array[start])によって処理されます。

それが現在の要素が合計に参加していないので、我々は見つける必要があり、我々はサブアレイは、その合計sum(すなわちあるインデックスstart+1で始まるのサブセットを見つける必要があり、array[start]が含まれていない場合より小さな配列で同じ合計)。

これはhasSum(array, start + 1, sum)によって処理されます。

したがって、2つの再帰呼び出し。

+0

ありがとうございました私にペイントできますか? – liran

+0

@liran「ペイント・ミー」とはどういう意味ですか? – Eran

+0

ステートメントでは、私は画像を添付して、すべての再帰呼び出しを描いた画像を描いています。 手順を正しい順序でペイントするので、私をページに描くことができれば幸いです。 私は比較的Javaで始まっています ありがとうございました – liran