fact.ob07 888 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. MODULE fact;
  15. IMPORT In, Out, Console;
  16. CONST
  17. MAX_INTEGER = ROR(-2, 1);
  18. VAR
  19. i, r: INTEGER;
  20. PROCEDURE f (n: INTEGER): INTEGER;
  21. VAR
  22. Res: INTEGER;
  23. BEGIN
  24. IF n = 0 THEN
  25. Res := 1
  26. ELSE
  27. Res := n * f (n - 1)
  28. END
  29. RETURN Res
  30. END f;
  31. BEGIN
  32. Console.open;
  33. i := 0;
  34. REPEAT
  35. r := f(i);
  36. Out.String ("The factorial of ");
  37. Out.Int (i, 2);
  38. Out.String (" is ");
  39. Out.Int (r, 0);
  40. Out.Ln;
  41. INC(i)
  42. UNTIL r >= MAX_INTEGER DIV i;
  43. In.Ln;
  44. Console.exit(TRUE)
  45. END fact.