Ich suche nach einem Algorithmus (oder einem C-likeImplementierung, keine itertools verfügbar), die alle Tupel generiert [a_0 a_1 ... a_ (n-1)] so dass 0 <= a_i <= i + 1. Hinweise auf Literatur sind ebenfalls willkommen.
Antworten:
3 für die Antwort № 1etwas wie das?
void printTuples (int n, int[] a, int i=0) {
if (i == n) {
//print a
return;
}
for (int j=0; j<=i+1; j++) {
a[i] = j;
printTuples (n, a, i+1);
}
}
0 für die Antwort № 2
Es wird Backtracking genannt. Suche wikipedia darüber. Du kannst es sowohl rekursiv als auch iterativ machen.
Amir, er will zwischen 0 und 1 + 1, nicht zwischen 0 und 1. Und ich denke, dass das Übergeben von Arrays auf dem Stack langsamer ist, als wenn sie als global betrachtet werden.
Ich denke du willst so etwas:
int a[YOUR_LENGTH];
void backtracking (int n, int counter) {
if (counter == n) {
// do whatever
return;
}
for (int j = 0; j <= counter + 1; ++ j) {
a[counter] = j;
backtracking(n, counter + 1);
}
}