Proof of Correctness: factorial.c

prev     next

Step5: Solve "eyeballs" for x, substitute into POST.

int factorial(int x) {
int f, y;
  // PRE-CONDITION: x >= 0              
 
  y = 1;
  // y = 1  
  
  f = 1;
  // y = 1 and f = 1
  
                                                            
  
  while (y <= x) {
    
                                                              
    
    f = f * y;
    
                                                              
    
    y = y + 1;
                                                              
  
  } // end while
 
  // INVARIANT:                y <= x + 1 and EXIT: y > x
  //                 y = x + 1   // => x = y - 1
  // POST-CONDITION: f = x!      // => f = (y - 1)! 
  // WARNING: This does not always work (what about zero?). Be careful.
  return f;
}