递归划分自然数的算法,简单易用
#include<bits/stdc++.h>
using namespace std;
int num[100];
void print(int k)
{
int i;
cout<<num[0]<<"="<<num[1];
for(i=2;i<=k;i++)
cout<<"+"<<num[i];
cout<<"\n";
}
int digui(int k,int n)
{
int i;
if(n<=0)//打印划分的情况
print(k);
else
for(i=num[k];i<=n;i++)
if(i>=num[k])
{
num[k+1]=i;
digui(k+1,n-num[k+1]);
}
}
int main()
{
int data;
cin>>num[0];
for(int i=1;i<=num[0]/2;++i)//第一位数一定小于(num)/2
{
num[1]=i;
digui(1,num[0]-num[1]);//位数,划分的数值
}
}