用递归方法 实现 输出正整数和等于n的所有正整数和式

用递归方法  实现 输出正整数和等于n的所有正整数和式


例如 n = 4时  输出:
4 = 4
4 = 3+1
4 = 2+2
4 = 2+1+1
4 = 1+1+1+1

#include
#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;
}





你可能感兴趣的:(小程序)