编辑代码

#include <stdio.h>

// 定义全局变量,存储分解结果
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;
}