2015-12-02 24 views
0

考虑下面的代码所有可能的非递减序列

double t0 = lower; 
for(double t1 = t0; t1 < upper+0.2 ; t1 = t1 + 0.1){ 
      for(double t2 = t1; t2 < upper+0.2 ; t2 = t2 + 0.1){ 
      for(double t3 = t2; t3 < upper+0.2 ; t3 = t3 + 0.1){ 
       for(double t4 = t3; t4 < upper+0.2 ; t4 = t4 + 0.1){ 
       for(double t5 = t4; t5 < upper+0.2 ; t5 = t5 + 0.1){ 
        bw.write(t0+"\t"+t1+"\t"+t2+"\t"+t3+"\t"+t4+"\t"+t5+"\n"); 
       } 
      } 
     } 
    } 
} 

代替具有5个嵌套循环,如果我要采取作为参数某个k = 5,其将输出相同的。我希望为任何k计算这样一个序列。

+0

递归...... –

回答

0

的代码是不完全很好的解释,但最简单的方法是递归方法:

void allPermutations(int k , double lower , double upper) 
    double[] d = new double[d] 
    d[0] = lower 
    allPermutations(k - 1 , d , upper) 

//k := number of elements that still need to be inserted into the permutation 
void allPermutations(int k , double[] arr , double upper) 
    if(k == 0) 
     print(arr) 
    else 
     double lower = arr[length(arr) - k - 1] 
     for(double d = lower ; d < upper + 0.2 ; d += 0.1) 
      arr[length(arr) - k] = d 
      allPermutations(k - 1 , arr)