0
私は次のコードを持っています。それは関数のとおりです:あなたはメソッドを呼び出し、それに数値を与えます。それはあなたがそれを与えた数のすべての順列を印刷します。変更を返す変数(Java)
は、例えば:
順列(3)
それが印刷されます:あなたのようなメソッドが呼ぶ
123、132、213、231、312、 321,
ここにコードは
01ですpublic static void main(String[] args) {
permutations(3);
}
public static void permutations(int n) {
boolean used[] = new boolean[n]; //all set to false by default
int perm[] = new int[n];
permutations2(used, 0, perm);
}
private static void permutations2(boolean used[], int index, int perm[]) {
if (index == used.length) {
for (int i = 0; i < perm.length; i++) {
System.out.print(perm[i] + "");
}
System.out.print(", ");
return;
}
for (int i = 0; i < used.length; i++) {
if (!used[i]) {
used[i] = true;
perm[index] = i + 1;
permutations2(used, index + 1, perm);
used[i] = false;
}
}
}
私の質問は返信になります。変数 'index'は何らかの理由で戻り値が呼び出されたときに変更されます。誰も私になぜこれが起こるか説明することができますか?コードは正常に動作します。
申し訳ありません。
これは再帰的なアルゴリズムなので、 'index'の新しい値が引数としてスタックにプッシュされますが、呼び出し元の値は変わりません。ヒント:IDEで、再帰呼び出しが行われる前にブレークポイントを設定し、関数がどのように深くなってから復帰しているかを確認します。 –
変更されません。それが何であるかを正確に指定することができれば、それを説明することができます。同じ関数を複数回呼び出してスタックし、それぞれに変数のコピーを取得していることに注意してください。 – chrylis
'index'の値は変更されず、新しい値を割り当てない限り変更されません! – BaSsGaz