我不知道这是否是一个愚蠢的问题,但我需要动态地更改for-循环的数目而不使用递归。
例如,如果是n=3,我需要3个嵌套的For -循环。
for(int i=0; i<size; i++){
for(int j=0; j<size-1; j++){
for(int k=0; k<size-2; k++){
//do something
}
}
}如果n=5:
for(int i=0; i<size; i++){
for(int j=0; j<size-1; j++){
for(int k=0; k<size-2; k++){
for(int l=0; l<size-3; l++){
for(int m=0; m<size-4; m++){
//do something
}
}
}
}
}是否有任何方法可以实现这一点而不递归?另一个问题:在Java中使用多个调度是什么用途?我试图在一种方法中编写代码,它应该在参数的不同情况下运行不同的事件。如果语句/三元运算符/大小写,则为否。
注意:我只能有一个方法(问题的一部分),不能使用递归。抱歉的。
发布于 2013-11-27 19:17:09
想想您在这个循环中运行了多少次。看上去像(size!) / (size - n)!
int numLoops = 1;
for (int i = 0; i < n; i++) {
numLoops*= (size - i);
}
for (int i = 0; i < numLoops; i++) {
//do something
}发布于 2013-11-27 19:08:23
这取决于你到底想做什么。递归总是可以用迭代代替(关于使用this post存储状态的例子,请参阅Stack )。
但是,也许模块(%)操作符可以在这里工作吗?例如,有一个增加变量(i)的单循环,然后使用模(i % 3等)计算其他变量。如果变量数量不同,可以使用Map间接存储变量的值。
发布于 2013-11-27 20:11:37
您必须创建循环计数器数组并手动增加它。
快速而肮脏的例子:
public static void nestedFors(int n, int size) {
assert n > size;
assert size > 0;
int[] i = new int[n];
int l = n - 1;
while(l >= 0) {
if(l == n - 1) {
System.out.println(Arrays.toString(i));
}
i[l]++;
if(i[l] == size - l) {
i[l] = 0;
l--;
} else if(l < n - 1) {
l++;
}
}
}用您自己的代码替换System.out.println(Arrays.toString(i))。
您可以在这里查看:http://ideone.com/IKbDUV
https://stackoverflow.com/questions/20250789
复制相似问题