#include <stdio.h>
void generatesum(int n, int maxPart, int current[], int length) {
if (n == 0) {
// print one valid partition
for (int i = 0; i < length; i++) {
printf("%d", current[i]);
if (i + 1 < length) printf("+");
}
printf("\n");
return;
}
for (int part = (n < maxPart ? n : maxPart); part >= 1; part--) {
current[length] = part;
generatesum(n - part, part, current, length + 1);
}
}
int main(void) {
int n = 5;
int current[64]; // enough space for recursion
generatesum(n, 4, current, 0);
return 0;
}
/*
run:
4+1
3+2
3+1+1
2+2+1
2+1+1+1
1+1+1+1+1
*/