Ackermann function: Difference between revisions

Content added Content deleted
(added RPL)
(PascalABC.NET)
 
Line 6,846: Line 6,846:
WriteLn('A(', m, ',', n, ') = ', ackermann(m,n));
WriteLn('A(', m, ',', n, ') = ', ackermann(m,n));
end.</syntaxhighlight>
end.</syntaxhighlight>

=={{header|Pascal}}==
<syntaxhighlight lang="pascal">Program Ackerman;

function ackermann(m, n: Integer) : Integer;
begin
if m = 0 then
ackermann := n+1
else if n = 0 then
ackermann := ackermann(m-1, 1)
else
ackermann := ackermann(m-1, ackermann(m, n-1));
end;

var
m, n : Integer;

begin
for n := 0 to 6 do
for m := 0 to 3 do
WriteLn('A(', m, ',', n, ') = ', ackermann(m,n));
end.</syntaxhighlight>


=={{header|PascalABC.NET}}==
<syntaxhighlight lang="delphi">
function Ackermann(m,n: integer): integer;
begin
if (m < 0) or (n < 0) then
raise new System.ArgumentOutOfRangeException();
if m = 0 then
Result := n + 1
else if n = 0 then
Result := Ackermann(m - 1, 1)
else Result := Ackermann(m - 1, Ackermann(m, n - 1))
end;

begin
for var m := 0 to 3 do
for var n := 0 to 4 do
Println($'Ackermann({m}, {n}) = {Ackermann(m,n)}');
end.
</syntaxhighlight>

{{out}}
<pre>
Ackermann(0, 0) = 1
Ackermann(0, 1) = 2
Ackermann(0, 2) = 3
Ackermann(0, 3) = 4
Ackermann(0, 4) = 5
Ackermann(1, 0) = 2
Ackermann(1, 1) = 3
Ackermann(1, 2) = 4
Ackermann(1, 3) = 5
Ackermann(1, 4) = 6
Ackermann(2, 0) = 3
Ackermann(2, 1) = 5
Ackermann(2, 2) = 7
Ackermann(2, 3) = 9
Ackermann(2, 4) = 11
Ackermann(3, 0) = 5
Ackermann(3, 1) = 13
Ackermann(3, 2) = 29
Ackermann(3, 3) = 61
Ackermann(3, 4) = 125
</pre>


=={{header|Perl}}==
=={{header|Perl}}==