O(3^n) だと思いますが、何かアイデアはありますか? このメソッドは、指定された数値が指定されたセットの任意のサブセットの合計であるかどうかを調べます (overroads boolean isSumOf(int[]s,int n))。このメソッドは、taget が 0 に等しい場合、またはセット内の現在の数値を消費する (または消費しない) 場合にすべての再帰呼び出しをチェックし、再試行しますが、target>0 であり、配列が使い果たされていない場合。
* @param set a given set of natural numbers.
* @param target the number.
* @param i where we are in the set.
* @return true if we reached target, else returns false.
**/
private static boolean isSumOf(int[] set,int target,int i)
{
// Found the set if we are now at 0.
boolean isSum = (target==0);
// Look no further if no more to try.
if ( target > 0 )
{
// Look no further if we've exhausted the array.
if ( i < set.length )
{
// Try or consume this number in the set (or not) and try again.
isSum = isSumOf(set, target - set[i], i) // Consume the current number in the set and try again recursively.
|| isSumOf(set, target - set[i], i+1) // Consume the current number in the set and avdance to rhe next number.
|| isSumOf(set, target, i+1); // Try the current number and avance to the next number in the set.
}
}
return isSum;