1 // 1、整数划分并输出结果
2 #define MAXSIZE 7
3 int a[200];
4 // 统计整数划分的个数
5 int q(int n, int m) {
6 if (n == 1 || m == 1)
7 return 1;
8 if (m == n){
9 return 1 + q(n, n - 1);
10 }
11 if (m>n) return q(n, n);
12 if (m<n) return q(n, m - 1) + q(n - m, m);
13 }
14
15 // sum 和值, k 数组的位数,b需要划分的整数
16 void print(int sum, int k, int b){
17 // 终止条件
18 if (sum > MAXSIZE)
19 return;
20 // 等于和则输出数组
21 if (sum == MAXSIZE){
22 int i;
23 for (i = 0; i<k - 1; i++) {
24 printf("%d+", a[i]);
25 }
26 printf("%d\n", a[i]);
27 }
28 else {
29 // 第一项从大到小分解
30 for (int j = b; j>0; j--){
31 // 将分解的结果保存在数组a中
32 a[k] = j;
33 // 求得分解项的和
34 sum += j;
35 // 递归继续分解,和增加,位数移动,j递减
36 print(sum, k + 1, j);
37 // 分解完成后对于累加和重置为0
38 // 以便后续再次分解
39 sum -= j;
40 }
41 }
42 }