5

こんにちは、このコードを非再帰的にするにはどうすればよいですか?

public class test {

    public static void main(String[] args) {
        int[] array = new int[]{0, 1, 2,3};
        int size = 2;
        int[] tmp = new int[size];
        //Arrays.fill(tmp, -1);
        generateCombinations(array, 0, 0, tmp);
    }

    private static void generateCombinations(int[] array, int start, int depth, int[] tmp) {

        if (depth == tmp.length) {
            for (int j = 0; j < depth; j++) {
                System.out.print(array[tmp[j]]);

            } System.out.println();
            return;
        }
        for (int i = start; i < array.length; i++) {
            tmp[depth] = i;
            generateCombinations(array, i + 1, depth + 1, tmp);
        }

    }
}

特定の数字からすべての組み合わせを生成します。

4

2 に答える 2

0

すべての再帰は繰り返しに書き換えることができ、その逆も可能です。一般的なアルゴリズムに従うだけです。

  1. 再帰の基本ケースを決定します。基本ケースに到達すると、再帰が終了します。すべての再帰には、定義済みの基本ケースが必要です。さらに、各再帰呼び出しは基本ケースに向かって進行する必要があります (そうしないと、再帰呼び出しは無限に実行されます)。この例では、基本ケースは n == 0 です。
  2. 基本ケースに到達するまで繰り返すループを実装します。
  3. ベースケースに向かって進みます。新しい引数を再帰メソッドの代わりにループの先頭に送信します。

この背後には、不変条件を維持するという概念があります。

于 2013-12-05T07:29:54.483 に答える