//array为要组合的数组size为长度firstIndex为要放在所以组合最前面的元素result保存所有组合每一行为一个组合 public int func(int[] arrayint[][] result){ //所有递归的结果都保存在result中并且最低层的组合结果保存在最后列 //返回本次递归组合的个数 int size = ls; if(size==)//如果没有元素不再向下递归 return ; int num = ;//本层递归的总组合数 int subnum = ;//本层每个元素作为头元素其他元素的组合个数(递归返回) for(int i=;i<size;i++){ int[] newArray = new int[size]; for(int j=k=;j<size;j++){//获取待排序子数组 if(j!=i) newArray[k++]=array[j]; } subnum=func(newArrayresult);//递归对后面的子数组组合并返回以array[i]开头的组合数 num+=subnum; //将组合好的所有新数组中的每个组合放在array[i]后面构成本层的组合保存到数组中 int j = resultrowssubnum;//表示本次组合的结果从哪行开始插入resultrows表示数组已有行数 while(j<resultrows) result[j++][lssize] = array[i];//将头元素加上 } return num; } |