填空题 (1997年中国科学技术大学)

对于正整数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 );
    }
}

参考答案

关键词

分解;test;递归;int;输出;函数;正整数;程序;参数;理解递归;