2015-12-02 61 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)