// 定义全局变量,存储分解结果
int numbers[100];
int count = 0;
// 递归实现正整数分解
void partition(int n, int m, int index) {
// 当n为0时,说明分解结束,输出结果
if (n == 0) {
printf("%d=", numbers[0]);
for (int i = 1; i < count; i++) {
printf("%d+", numbers[i]);
}
printf("%d\n", numbers[count]);
return;
}
// 当n小于等于m时,只能分解为n个1
if (n <= m) {
numbers[index] = n;
count = index;
partition(0, m, index + 1);
return;
}
// 分解为第一个加数为1和第一个加数大于1两种情况
for (int i = 1; i <= m; i++) {
// 交换加数的位置视为不同的分解方案
if (m == 1) {
numbers[index] = n;
} else {
numbers[index] = i;
}
count = index;
partition(n - i, m, index + 1);
}
return;
}
int main() {
int n, m;
printf("输入待分解的正整数n和m:");
scanf("%d %d", &n, &m);
partition(n, m, 0);
return 0;
}