对于正整数n ,输出其和等于n且满足以下限制条件的所有正整数的和式,组成和式的数字自左至右构成一个非递增的序列。如 n = 4 ,程序输出为:
4 = 4
4 = 3 + 1
4 = 2 + 2
4 = 2 + 1 + 1
4 = 1 + 1 + 1 + 1
test 是实现该功能的 C 程序段,请将未完成的部分补足,使之完整。
test 函数为一递归函数,参数 n 为被分解和式的数, k 为当前的分解深度。
算法思想是对 n 的所有合理的和式分解,将分解出的数(称为和数)存于二数组 a[]中。当其中一个分解己不再需要进一步进行时,即找到一个解,将存于 a[] 中的一个完整和式的和数输出。当还需要进一部分解时,以要进一部分解的数及分解深度为参数,递归调用 test 函数。
#define MAXN 100 int a[MAXN]; test(int n,int k){ int i,j; for (j=__________;j>=1;j--){ a[k]=j; if (__________){ printf ( "%d = %d" , a[0],a[l]); for (i = 2 ; i < = k ; i + + ) printf ( " + % d " , a[i]); printf ( " n " ); }else test(__________,k + l ); } }