RosettaCodeData/Task/Sudan-function/Modula-2/sudan-function.mod2

35 lines
660 B
Plaintext

MODULE Sudan;
FROM InOut IMPORT WriteCard, WriteString, WriteLn;
PROCEDURE sudan(n, x, y: CARDINAL): CARDINAL;
VAR k: CARDINAL;
BEGIN
IF n = 0 THEN RETURN x+y
ELSIF y = 0 THEN RETURN x
ELSE
k := sudan(n, x, y-1);
RETURN sudan(n-1, k, k+y)
END
END sudan;
PROCEDURE Show(n, x, y: CARDINAL);
BEGIN
WriteString("sudan(");
WriteCard(n, 0);
WriteString(", ");
WriteCard(x, 0);
WriteString(", ");
WriteCard(y, 0);
WriteString(") = ");
WriteCard(sudan(n,x,y), 0);
WriteLn
END Show;
BEGIN
Show(0, 0, 0);
Show(1, 1, 1);
Show(2, 1, 1);
Show(3, 1, 1);
Show(2, 2, 1)
END Sudan.