嵌套循环执行
Nested loop execution
这是一个非常简单的问题,但出于某种原因我感到困惑而且很烦人。
def test():
for i from Lo1 to Hi1:
for j from Lo2 to Hi2:
body()
body() 将执行多少次:
Lo1=1, Hi1=n, Lo2=i-2, Hi2=i+2
答案是5n次,但我不知道他们是怎么得到的!
Lo2=i-2, Hi2=i+2 内环
So (i-2)to(i+2)=5 Alternations EG: i-2 , i-1 , i , i+1 , i+2
Like (-2) to (+2)=-2,-1,0,1,2
Lo1=1, Hi1=n外环
1 to N
总计 Inner* Outer
5*N=5N
我认为最容易理解的方法是运行它。
例如对于 n=10
,以下 java 代码在每次迭代中打印 i
和 j
的值:
for (int i=0; i<=10; i++){
for (int j=i-2; j<=i+2; j++)
System.out.println("i = " + i + ", j= " + j);
}
结果如下:
i = 0, j= -2
i = 0, j= -1
i = 0, j= 0
i = 0, j= 1
i = 0, j= 2
i = 1, j= -1
i = 1, j= 0
i = 1, j= 1
i = 1, j= 2
i = 1, j= 3
i = 2, j= 0
i = 2, j= 1
i = 2, j= 2
i = 2, j= 3
i = 2, j= 4
i = 3, j= 1
i = 3, j= 2
i = 3, j= 3
i = 3, j= 4
i = 3, j= 5
i = 4, j= 2
i = 4, j= 3
i = 4, j= 4
i = 4, j= 5
i = 4, j= 6
i = 5, j= 3
i = 5, j= 4
i = 5, j= 5
i = 5, j= 6
i = 5, j= 7
i = 6, j= 4
i = 6, j= 5
i = 6, j= 6
i = 6, j= 7
i = 6, j= 8
i = 7, j= 5
i = 7, j= 6
i = 7, j= 7
i = 7, j= 8
i = 7, j= 9
i = 8, j= 6
i = 8, j= 7
i = 8, j= 8
i = 8, j= 9
i = 8, j= 10
i = 9, j= 7
i = 9, j= 8
i = 9, j= 9
i = 9, j= 10
i = 9, j= 11
i = 10, j= 8
i = 10, j= 9
i = 10, j= 10
i = 10, j= 11
i = 10, j= 12
您现在可以看到 i
有 10
次迭代,并且对于每个 i
,您有 j(from i-2 to i+2)
的 5
次迭代。因此总共 50 (5*N)
次迭代。
假设有一个 for 循环 Java 代码
for(int i=3;i<=6;i++)
{
//Statements to be executed
}
循环会执行4次(i=3,4,5,6)
如何计算?
公式=上限-下限+1
所以在上面的循环中就是6-3+1=4(上限=6,下限=3)
在你的问题中
上限=i+2
下限=i-2
内循环执行总次数=i+2-(i-2)+1=i+2-i+2+1=5
外层循环会执行n次所以只需要乘以n
因此答案变为 5*n=5n
这是一个非常简单的问题,但出于某种原因我感到困惑而且很烦人。
def test():
for i from Lo1 to Hi1:
for j from Lo2 to Hi2:
body()
body() 将执行多少次: Lo1=1, Hi1=n, Lo2=i-2, Hi2=i+2
答案是5n次,但我不知道他们是怎么得到的!
Lo2=i-2, Hi2=i+2 内环
So (i-2)to(i+2)=5 Alternations
EG: i-2 , i-1 , i , i+1 , i+2
Like (-2) to (+2)=-2,-1,0,1,2
Lo1=1, Hi1=n外环
1 to N
总计 Inner* Outer
5*N=5N
我认为最容易理解的方法是运行它。
例如对于 n=10
,以下 java 代码在每次迭代中打印 i
和 j
的值:
for (int i=0; i<=10; i++){
for (int j=i-2; j<=i+2; j++)
System.out.println("i = " + i + ", j= " + j);
}
结果如下:
i = 0, j= -2
i = 0, j= -1
i = 0, j= 0
i = 0, j= 1
i = 0, j= 2
i = 1, j= -1
i = 1, j= 0
i = 1, j= 1
i = 1, j= 2
i = 1, j= 3
i = 2, j= 0
i = 2, j= 1
i = 2, j= 2
i = 2, j= 3
i = 2, j= 4
i = 3, j= 1
i = 3, j= 2
i = 3, j= 3
i = 3, j= 4
i = 3, j= 5
i = 4, j= 2
i = 4, j= 3
i = 4, j= 4
i = 4, j= 5
i = 4, j= 6
i = 5, j= 3
i = 5, j= 4
i = 5, j= 5
i = 5, j= 6
i = 5, j= 7
i = 6, j= 4
i = 6, j= 5
i = 6, j= 6
i = 6, j= 7
i = 6, j= 8
i = 7, j= 5
i = 7, j= 6
i = 7, j= 7
i = 7, j= 8
i = 7, j= 9
i = 8, j= 6
i = 8, j= 7
i = 8, j= 8
i = 8, j= 9
i = 8, j= 10
i = 9, j= 7
i = 9, j= 8
i = 9, j= 9
i = 9, j= 10
i = 9, j= 11
i = 10, j= 8
i = 10, j= 9
i = 10, j= 10
i = 10, j= 11
i = 10, j= 12
您现在可以看到 i
有 10
次迭代,并且对于每个 i
,您有 j(from i-2 to i+2)
的 5
次迭代。因此总共 50 (5*N)
次迭代。
假设有一个 for 循环 Java 代码
for(int i=3;i<=6;i++)
{
//Statements to be executed
}
循环会执行4次(i=3,4,5,6)
如何计算?
公式=上限-下限+1
所以在上面的循环中就是6-3+1=4(上限=6,下限=3)
在你的问题中 上限=i+2
下限=i-2
内循环执行总次数=i+2-(i-2)+1=i+2-i+2+1=5
外层循环会执行n次所以只需要乘以n
因此答案变为 5*n=5n