如何找到这小块代码的循环不变量?

时间:2017-06-02 23:46:44

标签: iteration loop-invariant

前提条件:len(list)> = 2

的整数列表

后置条件:返回第二个最小值。如果列表中存在两个最小值,则返回最小值。

def SecondSmallest(list):
1   smallest = min(list[0], list[1])
2   second_smallest = max(list[0], list[1])
3   i = 2
4   while i < len(list):
5       item = list[i]
6       if item < second_smallest:
7           if item < smallest:
8               second_smallest = smallest
9               smallest = item
10          else:
11              second_smallest = item
12      i += 1
13  return second_smallest

非常感谢。

1 个答案:

答案 0 :(得分:0)

循环不变量是一个谓词,它适用于循环的每次迭代。 有关详细信息,请参阅What is a loop invariant?

在您的特定情况下,对于每次迭代,1 < i < len(list)都会成立。

有关更正式的定义,请参阅:https://en.wikipedia.org/wiki/Loop_invariant