我有一个函数,其中一个输入是我需要做的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 }
}
}
我如何构建方法?
答案 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;
}