//和式分解
#include <stdio.h>
#define N 50
void rd(int a[],int i,int k);
int main()
{
int n,a[N];
printf("请输入一个整数n(0<=n<=50):");
scanf("%d",&n);
a[0]=n;
printf("和式分解结果:\n");
rd(a,n,1);
return 0;
}
void rd(int a[],int i,int k)
{
int j,p;
for(j=i;j>=1;j--)
{
if(j<=a[k-1])//保证和式分解的值递减顺序
{
a[k]=j;//将当前待分解的数存入a[k]
if(j==i)//当前待分解数j等于i时 一个和式分解结束
{
printf("%d=%d",a[0],a[1]);
for(p=2;p<=k;p++)
{
printf("+%d",a[p]);
}
printf("\n");
}
else
{
rd(a,i-j,k+1);//递归子函数注意for循环其中参数范围
}
}
}
}