Ackermann function

The Ackermann function $$A(x,y)$$ is a recursive function defined by:


 * $$y + 1$$ if $$x = 0$$,
 * $$A(x - 1,1)$$ if $$y = 0$$, or
 * $$A(x - 1,A(x,y - 1))$$ otherwise.

So, for example,

$$ \begin{array}{cclclcl} A(2,2) &=& A(1,A(2,1)) &=& A(1,A(1,A(2,0)))&&\\ &=& A(1,A(1,A(1,1))) &=& A,(1,A(1,A(0,A(1,0)))) &=& A(1,A(1,A(0,A(0,1)))) = A(1,A(1,A(0,2)))\\ &=& A(1,A(1,2)) &=& A(1,A(0,A(1,1))) &=& A(1,A(0,A(0,A(1,0))))\\ &=& A(1,A(0,A(0,1))) &=& A(1,A(0,2)) &=& A(1,3) \end{array} $$

and so on. There are several general rules for special cases of x and y.

The Ackermann function is largely unrelated to the Ackermann numbers.

The function $$f(n) = A(n, n)$$'s inverse $$f^{-1}(n)$$, denoted $$\alpha(n)$$, is called the inverse Ackermann function. Since the Ackermann function grows rapidly for small input values, the inverse Ackermann function grows slowly. It has applications in time complexity theory.