Step10: f does not equal y! anymore. Looser bound on y. ALWAYS back to the INVARIANT.
int factorial(int x) {
int f, y;
// PRE-CONDITION: x >= 0
y = 1;
// y = 1
f = 1;
// y = 1 and f = 1
// INVARIANT: f = (y-1)! and y <= x + 1
while (y <= x) {
// f = (y-1)! and y <= x
f = f * y;
// f = y! and y <= x
y = y + 1;
// INVARIANT: f =(y-1)! and y <= x + 1
} // end while
// INVARIANT: f = (y-1)! and y <= x + 1 and EXIT: y > x
// f = (y-1)! and y = x + 1
// POST-CONDITION: f = x!
return f;
}