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; }