Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.    adapted to Oberon-07 by 0CodErr, KolibriOS team
  3.                                                    *)
  4. (*
  5.  * Written by Andrew Cadach
  6.  *
  7.  * Recursive (extremely uneficient:-) implementation of factorial
  8.  *
  9.  *                     n * (n-1)!, n <> 0
  10.  * By definition, n! =
  11.  *                     1, n = 0
  12.  *
  13.  *)
  14.  
  15. MODULE fact;
  16.  
  17. IMPORT In, Out, Console;
  18.  
  19.  
  20. CONST
  21.     MAX_INTEGER = ROR(-2, 1);
  22.  
  23.  
  24. VAR
  25.     i, r: INTEGER;
  26.  
  27.  
  28. PROCEDURE f (n: INTEGER): INTEGER;
  29. VAR
  30.     Res: INTEGER;
  31.  
  32. BEGIN
  33.     IF n = 0 THEN
  34.         Res := 1
  35.     ELSE
  36.         Res := n * f (n - 1)
  37.     END
  38.  
  39.     RETURN Res
  40. END f;
  41.  
  42.  
  43. BEGIN
  44.     Console.open;
  45.  
  46.     i := 0;
  47.     REPEAT
  48.         r := f(i);
  49.         Out.String ("The factorial of ");
  50.         Out.Int (i, 2);
  51.         Out.String (" is ");
  52.         Out.Int (r, 0);
  53.         Out.Ln;
  54.         INC(i)
  55.     UNTIL r >= MAX_INTEGER DIV i;
  56.     In.Ln;
  57.  
  58.     Console.exit(TRUE)
  59. END fact.