n以n为输入的方法嵌套for循环

时间:2016-04-07 23:43:52

标签: algorithm for-loop recursion

我有一个函数,其中一个输入是我需要做的for循环数。换句话说,功能是:

 double MethodName(otherinputs, int numberofForLoops)

然而,for循环的数量是嵌套的forloops的数量。换句话说,如果是numberofForLoops = 3,那么我会运行

 for(int i blah blah blah)
 {
      for(int j blah blah blah)
      {
            for(int k blah blah blah)
            { actual function }
      }
 }

我如何构建方法?

3 个答案:

答案 0 :(得分:0)

没有办法直接这样做。你可以做的是使用递归,并为你需要的每个循环做一个递归调用(并在方法中有一个循环)

答案 1 :(得分:0)

因此,如果您的actual function不依赖于i, j, k,则可以只用一个n循环代替。{/ p>

for(int j blah^n){
   actual function
}

执行的次数与执行n嵌套循环的次数相同。

答案 2 :(得分:0)

该算法非常类似于递增一个非常长的数字(在变化的基数BTW中)。

由于你有不确定数量的循环,你需要将他们的计数与其限制一起传递:

    ret_type do_loops(int numberOfForLoops, int limits[])

do_loops函数应将当前状态保持在类似的数组中:

    ret_type do_loops(int numberOfForLoops, int limits[]) {
        int indices[numberOfForLoops] = { 0 };

并始终尝试增加可能的最低维度:

    ret_type do_loops(int numberOfForLoops, int limits[]) {
        int indices[numberOfForLoops] = { 0 };
        int index = 0;
        while (1) {
            // Call with current index configuration
            call_target_function(numberOfForLoops, indices);

            // Increment current loop. If it overflows, propagate the carry
            indices[index] += 1;
            while (index < numberOfForLoops && indices[index] == limits[index]) {
                indices[index] = 0;
                index += 1;
            }

            // If the highest dimension overflown, you are done
            if (index == numberOfForLoops) {
                return ...;
            }

            // If some dimension successfully incremented, all dimensions below it were reset to 0
            index = 0;
        }