用递归方法 实现 输出正整数和等于n的所有正整数和式
例如 n = 4时 输出:
4 = 4
4 = 3+1
4 = 2+2
4 = 2+1+1
4 = 1+1+1+1
#include<stdio.h>
#define N 100000
int a[N];
void Rd(int n, int k)
{
int i , c;
for(c = n; c>=1; c--) /*待分解的数是n*/
{
if(c <= a[k-1]) /*如果当前分解出的c小于等于上一个数(不增排列),则将c保存到数组中*/
{
a[k] = c;
if(c == n) /*如果c==n,则输出和式的分解*/
{
printf("%d=%d",a[0],a[1]);
for(i = 2; i <= k; i++)
printf("+%d",a[i]);
printf("\n");
}
else
Rd(n-c,k+1); /*对数n-c进行分解,分解出第k+1个和数*/
}
}
}
int main (void)
{
int n;
while(scanf("%d", &n)!=EOF)
{
if(n == 0) return 0;
a[0] = n;
Rd(n,1);
}
return 0;
}