递归java - 不同的循环不理解如何工作

时间:2016-06-12 17:02:22

标签: java recursion

我理解递归和代码的原理,但是不理解循环,为什么变量在同一行,我们可以解释循环是如何工作的?

这一行:

 for (int i = digit, j = 1; i >= 1; i--, j++)

代码:

public static boolean hasSubSeries(int[] arr, int digit) {
    return hasSubSeriesHelper(arr, arr.length, digit);
}

public static boolean hasSubSeriesHelper(int[] arr, int size, int digit) {
    if (size == 0)
        return false;

    for (int i = digit, j = 1; i >= 1; i--, j++) {
        if (arr[size - j] != i)
            return hasSubSeriesHelper(arr, size - 1, digit);
    }

    return true;
 }

感谢的

2 个答案:

答案 0 :(得分:1)

for 循环的结构如下:

for( starting conditions; verification at each loop; action at end of loop)

在您的具体案例中:

for (int i = digit, j = 1; i >= 1; i--, j++)
  • 开始条件:

    • 变量i,它等于函数digits开头给出的变量hasSubSeriesHelper(int[] arr, int size, int digit)中包含的值。
    • 变量j,从1开始。
  • 每次循环验证:

    • 一旦每个循环完成,我们将检查这个,如果它是True,我们继续循环,如果不是,我们退出循环。
    • 我们检查在开始时声明的i是否大于或等于1,如果我们继续循环,如果不是我们停止。
  • 循环结束时的操作:

    • 我们执行了两项操作i--i减少了1j++的价值,j增加了1的值while

总结一下,如果您愿意,可以将其翻译为int i = digit; int j = 1; while ( i >= 1 ) { // the code inside the for loop goes here i--; j++; } 循环:

max r
x1**2 + y1**2 <= (1-r)**2
(x1-x2)**2 + (y1-y2)**2 >= 4*r**2
0 <= r <= 1

请注意,最后的动作发生在循环内部,而起始条件在循环之前发生。

这也应该澄清为什么你可以在同一行中有各种声明,只要它们属于同一类型。

答案 1 :(得分:0)

gmvo.GroupMembershipValidList = new ListGroupMembershipUploadInput(); 循环中有三个部分

  • N°1:变量的初始化
  • N°2:评估布尔表达式以继续/停止循环
  • N°3:对变量进行更改

1

您可能在第一部分中进行了多次初始化,只要类型保持不变,以下内容完全可能:

我们在for声明的第一部分中声明并实例化三个变量。

for