Skolski primjer rekurzije. :) Ja bih to ovako rijesio:
[code:1]void subset(int *niz, int n, int k){
static int cnt = 0;
if (k == n) {
int i;
// Ispis s puno "kozmetike" (dakle, moze i daleko jednostavnije)
printf("Podskup #%d: {", ++cnt);
for (i = 0; (i < n) && !niz[i]; i++);
if (i < n) printf("%d", i + 1);
for (i++; i < n; i++) if (niz[i]) printf(", %d", i + 1);
printf("}\n");
} else {
niz[k] = 0;
subset(niz, n, k+1);
niz[k] = 1;
subset(niz, n, k+1);
}
}
main() {
int *niz, n;
scanf("%d", &n);
niz = (int *)malloc(n*sizeof(int));
subset(niz, n, 0);
free(niz);
}
[/code:1]
Btw, [b]moguce[/b] je i bez rekurzije, samo podosta teze (pogotovo za n>8*sizeof(int)). ;)
Skolski primjer rekurzije. Ja bih to ovako rijesio:
Kod: | void subset(int *niz, int n, int k){
static int cnt = 0;
if (k == n) {
int i;
// Ispis s puno "kozmetike" (dakle, moze i daleko jednostavnije)
printf("Podskup #%d: {", ++cnt);
for (i = 0; (i < n) && !niz[i]; i++);
if (i < n) printf("%d", i + 1);
for (i++; i < n; i++) if (niz[i]) printf(", %d", i + 1);
printf("}\n");
} else {
niz[k] = 0;
subset(niz, n, k+1);
niz[k] = 1;
subset(niz, n, k+1);
}
}
main() {
int *niz, n;
scanf("%d", &n);
niz = (int *)malloc(n*sizeof(int));
subset(niz, n, 0);
free(niz);
}
|
Btw, moguce je i bez rekurzije, samo podosta teze (pogotovo za n>8*sizeof(int)).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|