예, 제대로 작동합니다. 모든 n 카드 조합을 나열하려면이 방법이 효과가 없습니다.
재귀가 필요합니다. 카드 0을 슬롯 0에 놓습니다. 나머지 n-1 슬롯에있는 모든 n-1 카드 손 (0 제외)을 재귀 적으로 나열하십시오. 슬롯 0에있는 카드 1로 반복하십시오. 아주 쉽습니다.
편집 : 일부 코드 :
private static final int NUM_CARDS = 52;
public static void main(String[] args) {
enumerateAllHands(Integer.parseInt(args[0]));
}
private static void enumerateAllHands(int n) {
if (n > NUM_CARDS) {
throw new IllegalArgumentException();
}
int[] cards = new int[n];
BitSet cardsUsed = new BitSet();
enumerate(cards, 0, cardsUsed);
}
private static void enumerate(int[] cards, int from, BitSet cardsUsed) {
if (from == cards.length) {
emit(cards);
} else {
for (int i = 0; i < NUM_CARDS; i++) {
if (!cardsUsed.get(i)) {
cards[from] = i;
cardsUsed.set(i);
enumerate(cards, from + 1, cardsUsed);
cardsUsed.clear(i);
}
}
}
}
private static void emit(int[] cards) {
System.out.println(Arrays.toString(cards));
}
권자는 그 의사 코드로 변환 할 수 – Aly
당신이 정말로하지 않는 재귀가 필요합니다. 0에서 각 루프를 시작하고 카드가 일치하는 경우 건너 뛸 수 있습니다. 더 재귀 적으로. – kgrad