算法简介这本书中,插入排序分析标题下有一行,内容为:
据我了解,“当以常规方式退出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 循环相混淆。这个问题的答案似乎支持他的误解。
答案 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
的时间。