Algorithm 所有可能的非递减序列

Algorithm 所有可能的非递减序列,algorithm,Algorithm,考虑以下代码 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 =

考虑以下代码

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");
                }
            }
        }
    }
}
double t0=更低;
对于(双t1=t0;t1

如果我将某个k=5作为参数,它将输出相同的结果,而不是5个嵌套循环。我希望为任何k计算这样的序列。

代码没有得到很好的解释,但最简单的方法是递归方法:

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)
void所有置换(int k,双下,双上)
双精度[]d=新双精度[d]
d[0]=较低
所有置换(k-1,d,上)
//k:=仍需插入置换的元素数
无效所有置换(整数k,双[]arr,双上)
如果(k==0)
打印(arr)
其他的
双下=arr[长度(arr)-k-1]
对于(双d=较低;d<较高+0.2;d+=0.1)
arr[长度(arr)-k]=d
所有置换(k-1,arr)