您必须训练自己的思维识别并遵循执行模式,并针对特定情况提出一个公式。一般的经验法则是,如果一个for
循环将运行它内部的代码x
次,并且它内部有一个循环将运行y
时间,那么内部循环内的代码将运行x*y
时间。
最常见的for
循环类型从零开始并以 1 递增,直到达到某个数字,如下所示:
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
for(int k = 0; k < z; k++)
// code here runs x * y * z times
要回答您的问题,如果您更改任何for
循环的任何部分,它将更改内部代码的执行次数。您需要通过考虑逻辑代码执行来确定将执行多少次。
for(int i = 1; i < x; i++)
for(int j = 0; j < y * 2; j++)
for(int k = 0; k < z; k += 2)
// code here runs (x - 1) * (y * 2) * (z / 2) times
在上面的示例中,每个for
循环都以不同的方式进行调整。请注意,运行次数的总体公式如何保持几乎相同,但现在每个循环每次被命中时运行的次数都不同。
当循环的变量影响多个循环时,事情会变得更加复杂。
for(int i = 0; i < x; i++)
for(int j = i; j < y; j++) // notice how `j` starts as `i`
// Code here runs `y` times the first time through the outer loop,
// then `y - 1` times,
// then `y - 2` times,
// ...
// if x < y, the pattern continues until the xth time,
// when this loop runs `y - x` times.
// if x > y, the pattern will stop when y == x, and
// code here will run 0 times for the remainder of
// the loops.
所以在最后一个例子中,假设x < y
,循环将运行y + (y-1) + (y-2) ... + (y-x)
时间。