0
class fs {

    int lenArray;

    void check (int [ ] array) {

        lenArray = array.length;

        for (int i = 0; i < lenArray; i++)
        {
            if (search (array, i, 5, 0))
            {
                System.out.println ("We found it!!!");
                return;
            }                
        }
    }

    boolean search (int [ ] array, int i, int num, int count) {

        if (count == 2)
            if (num == 0)
                return true;
            else
                return false;

        int j = i;

        while (j < lenArray)
        {
           search (array, j++, num - array[i], count + 1);
        }
        return false;
    }
}

class findSum {
   public static void main (String [ ] args) {

       int A[ ]= {1, 2, 3, 4};

       fs obj = new fs ( );
       obj.check (A);
   }
}

再帰を使用して、合計が 5 になる配列に 2 つの数値があるかどうかを確認したいと思います。

実行したところ、結果はありませんでした。

誰でも問題を確認できますか?

4

1 に答える 1

1

問題は、再帰呼び出しが返すものをチェックしていないことです。

交換

search (array, j++, num - array[i], count + 1);

if (search (array, j++, num - array[i], count + 1))
  return true;

そしてそれはうまくいくはずです。

于 2013-02-27T15:46:48.500 に答える