96年的一个考研题目!请教完整程序写法!
程序说明
对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式,即组成和式的数字自左至右构成一个非递增的序列。如N=4,程序输出为:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
程序中分别采用递归和非递归解法的两个函数RD()和ND()。
函数RD()采用递归解法,它有两个参数N和K。其意义分别是被分解和式的数N,及当前第K度分解。算法思想是对N的所有合理的和式分解,将分解出的数(称为和数)存于数组A{}中。当其中一个分解已不再需要进一步分解时,即找到一个解,将存于数组A{}中的一个完整和式的和数输出。当还需要进一步分解时,以要进一步分解的数及分解深度为参数,递归调用分解和式函数。
函数ND()以要分解的数为参数,另开设一个数组R{},用于存储当前还未分解的余数。在求一个解的第K步时,A{K}为第K个和数,R{K}为相应的余数。当找到一个分解后(此步R{K}等于0),输出解,并作回溯处理,从当前K退回到第一个不为1的和数,将其减1,并将其余数加1,准备去找另一个解,否则,生成下一步的分解和数与余数.