为什么“ for”循环比循环主体执行更多的时间?

时间:2019-07-17 11:21:36

标签: algorithm clrs

算法简介这本书中,插入排序分析标题下有一行,内容为:

  

“当以常规方式退出for或while循环时(即,由于循环头中的测试),该测试执行的次数比循环主体多一倍。”

据我了解,

for 循环使用一个计数器作为迭代变量。因此,例如,通过执行以下代码:

for j in range(0,3): print(j)

在python中,我们得到结果:

0

1

2

迭代变量 j 仅通过值0、1和2。因此, for 循环和循环主体都只能执行三次。

在这里也提出了类似的问题:Why are loops executed one more time than the loop body?

但是,我认为OP将 for 循环的机制与 while 循环相混淆。这个问题的答案似乎支持他的误解。

2 个答案:

答案 0 :(得分:0)

在您的Python示例中,循环中的do_something()

for j in range (0,n):
    do_something()

被执行n-1次,因为范围的上限是非包含性的。因此,它将在j = 0,j = 1,... j = n-1时执行。循环本身将再执行一次(即,当j = n时),并看到该值不再在范围内,并且不会执行主体。

这就是为什么for循环执行的时间比主体执行时间多的原因。

相同的推理当然也适用于for循环。

答案 1 :(得分:0)

这是因为对循环条件的评估总比对循环主体的执行要多。
举个简单的例子:

x = 4
while x < 0:
    x += 1
    print('hello')

我们可以看到,循环的主体从未执行过(0次),而循环的 exit条件被评估了一次(1次)。
因此,在任何情况下,我们都有以下内容:
每次条件评估为True时,循环主体都会执行一次
AND
条件是,要使程序退出循环,需要再评估False的时间。