RosettaCodeData/Task/Ackermann-function/00DESCRIPTION

26 lines
1.2 KiB
Text
Raw Permalink Normal View History

2016-12-05 22:15:40 +01:00
The '''[[wp:Ackermann function|Ackermann function]]''' is a classic example of a recursive function, notable especially because it is not a [[wp:Primitive_recursive_function|primitive recursive function]]. It grows very quickly in value, as does the size of its call tree.
2015-11-18 06:14:39 +00:00
The Ackermann function is usually defined as follows:
2013-04-10 12:38:42 -07:00
2016-12-05 22:15:40 +01:00
<big>
2013-04-10 12:38:42 -07:00
:<math> A(m, n) =
\begin{cases}
n+1 & \mbox{if } m = 0 \\
A(m-1, 1) & \mbox{if } m > 0 \mbox{ and } n = 0 \\
A(m-1, A(m, n-1)) & \mbox{if } m > 0 \mbox{ and } n > 0.
\end{cases}
</math>
2016-12-05 22:15:40 +01:00
</big>
2013-04-10 12:38:42 -07:00
<!-- <table><tr><td width=12><td><td><math>n+1</math><td>if <math>m=0</math> <tr><td> <td><math>A(m, n) =</math> <td><math>A(m-1, 1)</math> <td>if <math>m>0</math> and <math>n=0</math> <tr><td><td><td><math>A(m-1, A(m, n-1))</math>&nbsp;&nbsp;<td> if <math>m>0</math> and <math>n>0</math></table> -->
2020-02-17 23:21:07 -08:00
Its arguments are never negative and it always terminates.
2015-02-20 00:35:01 -05:00
2020-02-17 23:21:07 -08:00
;Task:
Write a function which returns the value of <math>A(m, n)</math>. Arbitrary precision is preferred (since the function grows so quickly), but not required.
2016-12-05 22:15:40 +01:00
2015-02-20 00:35:01 -05:00
;See also:
* [[wp:Conway_chained_arrow_notation#Ackermann_function|Conway chained arrow notation]] for the Ackermann function.
2016-12-05 22:15:40 +01:00
<br><br>