题目链接:自然数的拆分问题
java代码:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static int n;
public static ArrayList<Integer> a = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
f(n,1);
}
// current_num表示当前剩余的数,递归终止条件为current_num==0,此时输出结果
// 由于每一行里面的数字都是越来越大,如不存在1+4+2,所以每一层递归都需要一个start,大于等于前面一个数字
// 数组a用来记录和输出结果
public static void f(int current_num,int start) {
if(current_num>0) {
for(int i=start;i<n;++i) {
a.add(i);
f(current_num-i,i);
a.remove(a.size()-1);
}
}
else if(current_num==0) {
for(int i=0;i<a.size();++i) {
System.out.print(a.get(i));
if(i!=a.size()-1) System.out.print("+");
}
System.out.println();
}
}
}