2016-04-24 11 views
-1

こんにちは私は以下のように再帰を使用しています。すべての一致する回答を返す再帰

public static int match(int[][] mat , int count) 
    { 

     boolean isComplete = true; 
     for(int i=0;i<mat.length;i++) 
     { 
      for(int j=0;j<mat[i].length;j++) 
      { 
       if(mat[i][j] == 0) 
       { 
        isComplete = false; 
        count++; 
        ArrayList<int[][]> mMats = getMats(mat, i, j); 
        for(int k=0;k<mMats.size();k++) 
        { 
         match(mMats.get(k), count); 
        } 
       } 
      } 

     } 
     if(isComplete) 
     { 
      System.out.println(count); 
      return count; 

     } 
     else 
     { 
      return 0; 
     } 
    } 

私が達成したいのは、isCompleteブロックに到達すれば、その特定のカウントを返すべきです。私は他のカウントを望んでいない、今fuctionは多くのカウントを返すどのように私はこれを解決することができます。ありがとう。

+0

この関数は、関数が再帰的に実行されるたびに 'if(isComplete)'が呼び出されるため、複数のカウントを出力しています。トータルカウントだけが必要な場合は、最初にマッチ関数を呼び出す場所から戻り値を出力することができます。 – Keiwan

答えて

0

再帰呼び出しが0以外の何かを返す場合は、反復を停止することができます。

... 
for(int k=0;k<mMats.size();k++) { 
    int ret = match(mMats.get(k), count); 
    if(ret != 0) 
     return ret; 
} 
... 
+0

回避のために私は実際に0を取っていますが、0の代わりに任意の数を与えることができます。 – Dhananjay

+0

@Crazyカウントが返ってきています。だから、0の代わりに-1を返してそれをチェックすることができます。 –

関連する問題