Factorial/hy

From vishap oberon compiler
Jump to navigation Jump to search

Deutsch (de) | English (en) | հայերեն (hy)

Ֆակտորիալի հաշվարկը Oberon-2 լեզվով

Առաջին դեպքում ֆակտորիալը հաշվարկվում է իտերատիվ եղանակով։

PROCEDURE Fact(n : LONGINT) : LONGINT;
VAR i, res : LONGINT;
BEGIN
  FOR i := 1 TO n DO
    res := res * i
  END;
  RETURN res
END Fact;

Երկրորդ դեպքում ֆակտորիալը հաշվարկվում է սովորական ռեկուրսիայի օգնությամբ։

PROCEDURE Fact(n : LONGINT) : LONGINT;
  BEGIN
    IF n = 1 THEN
      RETURN 1
    ELSE
      RETURN n * Fact(n - 1)
    END;
  END Fact;

Երրորդ դեպքում օգտագորված է tail recursion (?):

PROCEDURE Fact(n : LONGINT) : LONGINT;
    (**)
    PROCEDURE FacOne(n, r : LONGINT) : LONGINT;
    VAR
      w : LONGINT;
    BEGIN
      IF n = 1 THEN w := r ELSE w := FacOne(n - 1, n * r) END;
      RETURN w
    END FacOne;

  BEGIN
    RETURN FacOne(n, 1)
  END Fact;