public class EchoPlayer {
static int M = 5;
static int N = 4;
static int[][] b = new int[5][N];
static int k=0;
public static void main(String[] args){
C(5,4,4);
System.out.println();
for(int i=0;i<5;i++){
for(int j=0;j<N;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
static void C(int m,int n,int T){
int i,j;
for(i=n;i<=m;i++) {
b[k][n-1] = i;
if(n>1)
C(i-1,n-1,T);
else {
for(j=0;j<=T-1;j++){
System.out.print(b[k][j] + " ");
}
System.out.println();
k++;
}
}
}
}
输出:
1 2 3 4
1 2 3 5
1 2 4 0
1 3 0 0
2 0 0 0
1 2 3 4
1 2 3 5
1 2 4 0
1 3 0 0
2 0 0 0
到底哪儿不对你得说啊?
他应该输出1 2 3 4 5取出4个数的组合,一共五种情况,为啥从第三种开始就有的位置为零了。
@斗榖於菟:
递归的有问题,第一次是以4为最大值递归4次,第二次以5为最大值递归4次,
然后依次是 :
以4为最大值递归3次(有1个0) 即n=3,m=4
以3为最大值递归2次(有2个0)即n=2,m=3
以2为最大值递归1次(有3个0)即n=1,m=2
这个算法是什么原理?实现的有问题
@斗榖於菟:
修改起来也很简单,加一句就行。
for(j=0;j<=T-1;j++){ b[k][j] = b[k][j]==0 ? b[k-1][j] : b[k][j]; // 加这一句,意思就是如果没有值就用上次的值 System.out.print(b[k][j] + " "); }