in order to know what it does
Code:
void what(int n, int limit, int* answer, int place){ 
int i;
   	if (n > 0)
	   for (i=min(n,limit); i>0; i--){
		   answer[place]=i; 
		   answer[place+1]=-1;
		   what(n-i, i, answer, place+1);
		   answer[place]=-1;
	   }
   	else{
	   for (i=0; answer[i]!=-1; i++)
		printf("%d ", answer[i]);
	   printf("\n");
   	}
 }