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}}== |