/*
X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
D国最多可以派出1人。
E国最多可以派出1人。
F国最多可以派出3人。
那么最终派往W星的观察团会有多少种国别的不同组合呢?
组合问题 (计数问题)
*/
public class Main3 {
//a各个国家能派出的最大人数
//x派出方案的组合
//k选择在哪个国家派出
//goal 目标派出人数
static int sum = 0;
public static void main(String[] args) {
int[] a = {4,2,2,1,1,3};//a-f国家有几名代表
int[] x = new int[a.length];
f(a,x,0,5);
System.out.println(sum);
}
public static void f(int[] a,int[] x,int k,int goal) {
if(k==x.length ) {
if(goal == 0) {
sum += 1;
//return;
}
//return;
}
for(int i = 0;i <= Math.min(a[k],goal);i++ ) {
x[k] = i;
f(a,x,k+1,goal-i);
}
x[k] = 0;
}
}
先上代码
下面是问题
在f方法中注释掉的两处的return
为什么当return在外面括号时 ,不会报错。。。
而在里面的括号时,会出现超出栈异常。。。。
他们不都是加一然后返回吗。。。