Celem programu jest wygenerowanie wszystkich podzbiorów k-elementowych zbioru liczb od 1 do n. Tylko, że gdzieś tutaj jest błąd, bo program nie działa do końca prawidłowo. Może mi ktoś wskazać co tu jest nie tak?

#include <stdio.h>

void rekurencja(int p, int S[], int k, int m)
{

	if (k==0)
	{
		int i;
		for(i=0; i<m; i++)
		{
			printf("%d", S[i]-1);
			}
		printf("\n");	
	}
	else {
		if(p==0) return;
		S[k-1]=p;
		rekurencja(p-1, S, k-1, m);
		rekurencja(p-1, S, k, m);
	}
	
}

void podzbiory(int n, int k)
{
	int S[k]; rekurencja(n,S,k,k);
}

main() {
	
	printf("Podaj ostatnia liczbe zbioru: ");	
	int n;
	scanf("%d" , &n);
	printf("Podaj ilu elementowe maja byc podzbiory: ");	
	int k;
	scanf("%d" , &k);
	podzbiory(n,k);
	
	
}