package com.chunfeng.day02;
import java.util.ArrayList;
import java.util.List;
/**
* 2020/4/16
* @author JX
* 优化,递归方法
*/
public class Summation {
public static void main(String[] args) {
/*
* 在此处输入数字
*/
outSum(4);
}
private static void outSum(int i) {
//循环一个数
for (int j = 1; j < i; j++) {
int u=i-j;
//定义容器
StringBuffer str=new StringBuffer();
//循环u
for (int k = 1; k <= u; k++) {
//判断是否是最后一个数据
if(k==u) {
str.append("1");
}else {
str.append("1+");
}
}
System.out.println("("+j+"+"+str.toString()+")");
//判断大于2时
if(j>=2) {
//求出剩余数
int sy=i-j;
//for (int k = j; k <= sy; k++) {
//创建数组
List<Integer> sz=new ArrayList<>();
sz.add(j);
//循环次数
int p=i/2;
getsum(sy,sz,p);
//}
}
}
}
/**
*
* @param sy 剩余数
* @param list
* @param c
*/
public static void getsum(int sy,List<Integer> list,int c){
for (int l2 = 2; l2 <= sy; l2++) {
Integer integer = list.get(list.size()-1);
if(integer>l2) {
continue;
}
//求剩余数
int ss2=sy-l2;
StringBuffer sb=new StringBuffer();
sb.append("(");
for (int l = 0; l < list.size(); l++) {
if(l==(list.size()-1)) {
sb.append(list.get(l));
}else {
sb.append(list.get(l)+"+");
}
}
sb.append("+"+l2);
if(ss2==0) {
sb.append(")");
System.out.println(sb.toString());
continue;
}
//定义容器
sb.append("+");
//循环u
for (int k4 = 1; k4 <= ss2; k4++) {
//判断是否是最后一个数据
if(k4==ss2) {
sb.append("1");
}else {
sb.append("1+");
}
}
System.out.println(sb.toString()+")");
--c;
if(c>0) {
List<Integer> list2=new ArrayList<Integer>();
list2.addAll(list);
list2.add(l2);
//内循环
getsum(ss2,list2,c);
}
}
}
}