http://blog.csdn.net/vinci_lau/article/details/7078575
1 #include <iostream> 2 using namespace std; 3 4 int a[10]={0}; 5 int len = 0; 6 7 void fun(int n,int m){ 8 if(n==0){ //所求数已被全部分划 9 cout<<a[0]; 10 //每行最后一个恰有m个数相加 11 for(int i=1;i<m;++i) 12 cout<<"+"<<a[i]; 13 if(m > len){ 14 cout<<endl; //到每行最后一列长度m都为len+1,此时应换行 15 ++len;//自增后就是行数 16 } 17 else 18 cout<<","; 19 return; 20 } 21 for(int i=n;i>=1;--i){ //按从大到小的顺序划分整数 22 if(m==0||i<=a[m-1]) { //把m=0单独写出来就是为了,//右边的数不能大于左边的数 23 a[m]=i; 24 fun(n-i,m+1); 25 } 26 } 27 } 28 29 int main() { 30 int n,m=0; 31 cin>>n; //输入一个1-10的整数 32 fun(n,m); //递归的方法打印所有的整数分划 33 //while(1); 34 return 0; 35 }