Difference between revisions of "Factorial/hy"

From vishap oberon compiler
Jump to navigation Jump to search
Line 4: Line 4:
 
Առաջին դեպքում ֆակտորիալը հաշվարկվում է իտերատիվ եղանակով։
 
Առաջին դեպքում ֆակտորիալը հաշվարկվում է իտերատիվ եղանակով։
  
<source lang="text" style="font-size:10pt">
+
<source lang="oberon2" style="font-size:10pt">
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
VAR i, res : LONGINT;
 
VAR i, res : LONGINT;
Line 17: Line 17:
 
Երկրորդ դեպքում ֆակտորիալը հաշվարկվում է սովորական ռեկուրսիայի օգնությամբ։
 
Երկրորդ դեպքում ֆակտորիալը հաշվարկվում է սովորական ռեկուրսիայի օգնությամբ։
  
<source lang="text" style="font-size:10pt">
+
<source lang="oberon2" style="font-size:10pt">
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
   BEGIN
 
   BEGIN
Line 30: Line 30:
 
Երրորդ դեպքում օգտագորված է tail recursion (?):
 
Երրորդ դեպքում օգտագորված է tail recursion (?):
  
<source lang="text" style="font-size:10pt">
+
<source lang="oberon2" style="font-size:10pt">
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
PROCEDURE Fact(n : LONGINT) : LONGINT;
 
     (**)
 
     (**)

Revision as of 03:32, 7 March 2015

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;