Java—迭代越来越多的元素

Java—迭代越来越多的元素,java,Java,我希望通过越来越多的元素在Java中迭代,这是我一直在思考的代码,但我不确定: for (int i = 0; i<=maxSomething; i++) { action(i); for(String a : ArrayOfString) otherActions(); } for(int i=0;i您需要嵌套循环: for (int i = 0; i <= maxSomething; i++) { for (int j = 0; j

我希望通过越来越多的元素在Java中迭代,这是我一直在思考的代码,但我不确定:

for (int i = 0; i<=maxSomething; i++) {  
    action(i);

    for(String a : ArrayOfString)
       otherActions();
}

for(int i=0;i您需要嵌套循环:

for (int i = 0; i <= maxSomething; i++) {
    for (int j = 0; j <= i; j++) {
        action(j);
    }
}

for(int i=0;i有一个嵌套的for循环,将一个新变量j从0迭代到i,其中包含动作(j)。这将从0调用到i。

每次迭代后动作是否会更改,动作(0)一旦完成-在下一次循环运行中调用时是否可以重用?如果是,您应该在此处使用递归。

更新 我看到下面的递归函数只给出一个操作序列的结果

public static void recursive (int i) {
    action(i);
    if (i > 0) 
        recursive(--i);
}
因此,最好使用嵌套循环


递归会使堆栈膨胀。

@Axel:这并不快。他花了90秒来写这篇文章?@MartijnCourteaux我在打字时看到弹出窗口“加载新答案”,当时我认为这相当于30秒。不……Java不是Lisp。我认为这对于标准Java开发人员来说可读性较低(并使堆栈膨胀)…当你用成千上万的
i
来调用它时,你会得到一个
StackOverflowerError
。尾部递归在这里是一个糟糕的解决方案。@SeanOwen好的,谢谢你的解释,我认为没有必要发布一个与Jespers类似的答案。不管怎样,这都不是一个更好的答案,但仍然不是一个错误的答案。或者是吗?Tail opt编译器的初始化可以将递归转换为迭代,但在Java中这可能会有问题,因此@Axel是正确的。递归仍然是+1。Java的问题是它没有优化尾部递归。这将导致以下几件事:现代CPU有堆栈缓存(8或16次调用深度)。如果调用深度超过该深度,则深度调用将被预测失误,导致需要1个周期的调用现在需要16到100个周期。这使得深度递归非常缓慢。另一个问题是堆栈溢出的可能性。进一步注意,这两个代码示例并不等效。第二个示例中需要额外的
If