Mutual recursion: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Modula-2) |
|||
Line 2,533: | Line 2,533: | ||
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 12 13 14 14 15 |
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 12 13 14 14 15 |
||
=={{header|Modula-2}}== |
|||
<lang modula2>MODULE MutualRecursion; |
|||
FROM InOut IMPORT WriteCard, WriteString, WriteLn; |
|||
TYPE Fn = PROCEDURE(CARDINAL): CARDINAL; |
|||
PROCEDURE F(n: CARDINAL): CARDINAL; |
|||
BEGIN |
|||
IF n=0 THEN RETURN 1; |
|||
ELSE RETURN n-M(F(n-1)); |
|||
END; |
|||
END F; |
|||
PROCEDURE M(n: CARDINAL): CARDINAL; |
|||
BEGIN |
|||
IF n=0 THEN RETURN 0; |
|||
ELSE RETURN n-F(M(n-1)); |
|||
END; |
|||
END M; |
|||
(* Print the first few values of one of the functions *) |
|||
PROCEDURE Show(name: ARRAY OF CHAR; fn: Fn); |
|||
CONST Max = 15; |
|||
VAR i: CARDINAL; |
|||
BEGIN |
|||
WriteString(name); |
|||
WriteString(": "); |
|||
FOR i := 0 TO Max DO |
|||
WriteCard(fn(i), 0); |
|||
WriteString(" "); |
|||
END; |
|||
WriteLn; |
|||
END Show; |
|||
(* Show the first values of both F and M *) |
|||
BEGIN |
|||
Show("F", F); |
|||
Show("M", M); |
|||
END MutualRecursion.</lang> |
|||
{{out}} |
|||
<pre>F: 1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 |
|||
M: 0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 </pre> |
|||
=={{header|Nemerle}}== |
=={{header|Nemerle}}== |
||
<lang Nemerle>using System; |
<lang Nemerle>using System; |