具有不确定层的多层循环

时间:2018-03-23 17:10:12

标签: algorithm

我尝试了多种变体,但似乎都没有。有什么想法吗?

int[] array = new int[n];    
for(int i = 0; i < array[0]; i++){
    for(int j = 0; j < array[1]; j++){
        ....
        for(int k = 0; k < array[array.length - 1]; k++){
            do something with i,j, ... , k
        }
    }
}

所以如果我先不知道数组的长度,那么我就不能为循环编写某些层,我不知道该怎么做。 提前致谢。

2 个答案:

答案 0 :(得分:0)

使用递归:

arr = [a, b, c, ... n]

function iterate_one_level(arr, indices) {
  if (arr == []) { 
    do_something_with_indices(indices)
    return;
  }

  for (let i=0; i<arr.length; i++) {
    iterate_one_level(arr[1:], indices + [i])
  }
}

或者,您的语言可能与itertools.product

类似

答案 1 :(得分:0)

执行此操作的规范方法是使用递归:

deep_loop(array[], index[]) {
    if array.length == 0     // Finally reached the innermost loop
        do something with index[:]
    else                     // Go down one loop level
        // loop on the first array element
        for n in range 0:array[0] {
            // recur on the rest of the array
            // append this index to the sequence
            deep_loop( array[1:], index[:] + [n] )