我正在尝试了解 C 中的循环不变量。我有一个代码并且我有循环不变量,但我不完全理解为什么。这是代码:
/* 0 ≤ m < n < ASIZE AND A[m] ≥ A[m+1] ≥ ... ≥ A[n] */
void ReverseArray(int A[], int m, int n)
{
int temp;
while (m < n)
{
temp = A[m]; A[m] = A[n]; A[n] = temp;
m++;
n--;
/* loop invariant: 0 < m < n < ASIZE OR m == n OR m == n+1 */
}
}
/* for the initial values of m and n, A[m] ≤ A[m+1] ≤ ... ≤ A[n] */
循环不变量是: 0 < m < n < ASIZE OR m == n OR m == n+1
我想我理解 0 < m < n < ASIZE。这将是因为 while 循环,它说 m 不能为 0,但它必须小于 n。并且 n 必须小于数组大小。
但我不明白为什么 m == n 和 m == n+1。
有什么想法吗?