首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更改嵌套的for循环数。

动态更改嵌套的for循环数。
EN

Stack Overflow用户
提问于 2013-11-27 18:57:37
回答 5查看 5.8K关注 0票数 7

我不知道这是否是一个愚蠢的问题,但我需要动态地更改for-循环的数目而不使用递归。

例如,如果是n=3,我需要3个嵌套的For -循环。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中使用多个调度是什么用途?我试图在一种方法中编写代码,它应该在参数的不同情况下运行不同的事件。如果语句/三元运算符/大小写,则为否。

注意:我只能有一个方法(问题的一部分),不能使用递归。抱歉的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-27 19:17:09

想想您在这个循环中运行了多少次。看上去像(size!) / (size - n)!

代码语言:javascript
复制
int numLoops = 1;
for (int i = 0; i < n; i++) {
    numLoops*= (size - i);
}

for (int i = 0; i < numLoops; i++) {
    //do something
}
票数 3
EN

Stack Overflow用户

发布于 2013-11-27 19:08:23

这取决于你到底想做什么。递归总是可以用迭代代替(关于使用this post存储状态的例子,请参阅Stack )。

但是,也许模块(%)操作符可以在这里工作吗?例如,有一个增加变量(i)的单循环,然后使用模(i % 3等)计算其他变量。如果变量数量不同,可以使用Map间接存储变量的值。

票数 1
EN

Stack Overflow用户

发布于 2013-11-27 20:11:37

您必须创建循环计数器数组并手动增加它。

快速而肮脏的例子:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20250789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档