2016-04-23 14 views
2

私はrecursiveメソッドを使用してgroupSumを調べるためのこのコードを持っています。 この例でどのように再帰的に動作するのか分かりません。私はデバッグを使用しましたが、まだそれを理解していません。Javaでnumber sumの再帰はどのように機能しますか?

public class test { 

    public boolean groupSum(int start, int[] nums, int target) { 

     if(target == 0) 
      return true; 
     if (start == nums.length) 
      return false; 
     if (groupSum(start+1, nums, target-nums[start])) // what is the meaning of this line ? can we change this line to make the code easier to understand ? 
      return true; 
     return groupSum(start+1, nums, target); 

    } 


    public static void main(String[] args) { 

     int x = 0; 
     int y [] = {2,4,8}; 
     int k = 10; 

     test t = new test(); 
     boolean result = t.groupSum(x,y,k); 
     System.out.println(result); 
    } 

} 

おかげ

+0

紛らわしいものは何も言わずに、あなたが理解していないことを知るのは難しいです。デバッガを使用すると助けてくれるはずです。使用していれば、それだけ役立つはずです。 (それは練習と一緒に来ます) –

+0

この問題の良い治療方法はhttp://codingbat.com/prob/p145416です。同じテストケースを使用します。そこからここに来ましたか?彼らの説明についてあなたは理解できませんでしたか? –

+0

はい私はそこから来ました..私はこの行を正しく理解していませんでした 'groupSum(start + 1、nums、target-nums [start]) ' –

答えて

2

2つの再帰呼び出し

groupSum(start+1, nums, target-nums[start]) 

があり、我々はnums[start]

で値を引くか、私たちが到達可能な場合、我々は残りの目標に達することができるかどうかを確認してみてくださいこの番号のないターゲット。

groupSum(start+1, nums, target); 

は、それはあなたがそれが -4を残し、すべてのすべての値を試してみました見ることができますが、

public static void main(String[] args) { 
    int x = 0; 
    int[] y = {2, 4, 8}; 
    int k = 10; 

    boolean result = groupSum(x, y, k); 
    System.out.println(result); 
} 

public static boolean groupSum(int start, int[] nums, int target) { 
    System.out.println("groupSum(" + start + ", " + Arrays.toString(nums) + ", " + target + ")"); 
    if (target == 0) 
     return true; 
    if (start == nums.length) 
     return false; 
    if (groupSum(start + 1, nums, target - nums[start])) 
     return true; 
    System.out.print("or "); 
    return groupSum(start + 1, nums, target); 
} 

プリント

groupSum(0, [2, 4, 8], 10) 
groupSum(1, [2, 4, 8], 8) 
groupSum(2, [2, 4, 8], 4) 
groupSum(3, [2, 4, 8], -4) 
or groupSum(3, [2, 4, 8], 4) 
or groupSum(2, [2, 4, 8], 8) 
groupSum(3, [2, 4, 8], 0) 
true 

をデバッグ文を追加することができます助けにはならないデバッガは、それが戻りました8を含まないようにしてみたところ、成功したと判明した4は含まれていませんでした。

+0

ありがとうございました...この' groupSum(start + 1、nums 、target-nums [start]) 'を別の方法で使用しますか? –

+0

@DfgfHgh署名を変更して少し明確にすることができます。デバッガが助けにならない場合は、最初に各呼び出しで入力を印刷することをお勧めします。 –

+0

@DfgfHghデバッグログを含めるために私の答えを更新しました。 –

関連する問題