home *** CD-ROM | disk | FTP | other *** search
/ PC Plus 57 / ISSUE_57_JUN_1991 / SHORTIES / RECURSIO.MOD < prev    next >
Encoding:
Text File  |  1991-01-01  |  2.3 KB  |  145 lines

  1. MODULE recursion;
  2.  
  3. FROM InOut IMPORT WriteString, WriteLn, WriteCard;
  4. IMPORT IO;
  5.  
  6.  
  7.  
  8.  
  9. PROCEDURE nfact (num: CARDINAL): CARDINAL;
  10.  
  11. BEGIN
  12.   IF num = 1 THEN
  13.     RETURN 1;
  14.   ELSE
  15.     RETURN num * nfact(num-1);
  16.   END;
  17. END nfact;
  18.  
  19.  
  20.  
  21. PROCEDURE iszero (num: CARDINAL): BOOLEAN;
  22.  
  23. BEGIN
  24.    IF num=0 THEN
  25.      RETURN TRUE
  26.    ELSE
  27.      RETURN FALSE
  28.    END;
  29. END iszero;
  30.  
  31.  
  32.  
  33. PROCEDURE sucessor (num: CARDINAL): CARDINAL;
  34.  
  35. BEGIN
  36.   RETURN num+1;
  37. END sucessor;
  38.  
  39.  
  40.  
  41. PROCEDURE predecessor (num: CARDINAL): CARDINAL;
  42.  
  43. BEGIN
  44.   IF num=0 THEN
  45.     RETURN num
  46.   ELSE
  47.     RETURN num-1
  48.   END;
  49. END predecessor;
  50.  
  51.  
  52.  
  53. PROCEDURE sum (x,y: CARDINAL): CARDINAL;
  54.  
  55. BEGIN
  56.   IF iszero(x)=TRUE THEN
  57.     RETURN y
  58.   ELSE
  59.     RETURN sucessor(sum(predecessor(x),y))
  60.   END;
  61. END sum;
  62.  
  63.  
  64.  
  65. PROCEDURE product (x,y: CARDINAL): CARDINAL;
  66.  
  67. BEGIN
  68.   IF iszero(y)=TRUE THEN
  69.     RETURN y
  70.   ELSE
  71.     RETURN sum(x,product(x,predecessor(y)))
  72.   END;
  73. END product;
  74.  
  75.  
  76.  
  77. PROCEDURE fib (num: CARDINAL): CARDINAL;
  78.  
  79. BEGIN
  80.   IF (num=1) OR (num=2) THEN
  81.     RETURN 1
  82.   ELSE
  83.     RETURN fib(num-2) + fib(num-1)
  84.   END;
  85. END fib;
  86.  
  87.  
  88.  
  89. PROCEDURE isodd (num: CARDINAL): BOOLEAN;
  90.  
  91. BEGIN
  92.   IF iszero(num)=TRUE THEN
  93.     RETURN FALSE
  94.   ELSIF num=1 THEN
  95.     RETURN TRUE
  96.   ELSE
  97.     RETURN isodd(num-2)
  98.   END;
  99. END isodd;
  100.  
  101.  
  102.  
  103. PROCEDURE exponent (x,y: CARDINAL): CARDINAL;
  104.  
  105. BEGIN
  106.   IF iszero(y)=TRUE THEN
  107.     RETURN 1
  108.   ELSE
  109.     RETURN product(x,exponent(x,predecessor(y)))
  110.   END;
  111. END exponent;
  112.  
  113.  
  114.  
  115. (* Return TRUE  if  x>y else FALSE *)
  116.  
  117. PROCEDURE greater (x,y: CARDINAL): BOOLEAN;
  118.  
  119. BEGIN
  120.   IF iszero(x) THEN
  121.     RETURN FALSE
  122.   ELSIF iszero(y) THEN
  123.     RETURN TRUE
  124.   ELSE
  125.     RETURN greater(predecessor(x),predecessor(y))
  126.   END;
  127. END greater;
  128.  
  129.  
  130.  
  131. VAR
  132.   num: CARDINAL;
  133.  
  134. BEGIN
  135.   WriteString ("Hello World");
  136.   WriteLn; WriteLn; WriteString ("nfact(5)="); WriteCard (nfact(5),4);
  137.   WriteLn; WriteLn; WriteString ("sum(25,8)="); WriteCard (sum(25,8),4);
  138.   WriteLn; WriteLn; WriteString ("product(3,2)="); WriteCard (product(3,2),4);
  139.   WriteLn; WriteLn; WriteString ("fib(6)="); WriteCard (fib(6),4);
  140.   WriteLn; WriteLn; WriteString ("isodd(10)="); IO.WrBool (isodd(10),1);
  141.   WriteLn; WriteLn; WriteString ("exponent(2,3)="); WriteCard (exponent(2,3),4);
  142.   WriteLn; WriteLn; WriteString ("greater(10,8)="); IO.WrBool (greater(10,8),1);
  143.  
  144. END recursion.
  145.