title: Funzione di Ackermann
text: # Funzione di Ackermann
  
  In matematica, la funzione di Ackermann è una funzione $f(x,y,z)$ che ha come dominio l'insieme delle terne di numeri naturali e come codominio i numeri naturali. Essa è definita per ricorrenza nel seguente modo:
  
      $f(0,0,z)=z$
      $f(0,y+1,z)=f(0,y,z)+1$
      $f(1,0,z)=0$
      $f(x+2,0,z)=1$
      $f(x+1,y+1,z)=f(x,[f(x+1,y,z)],z).$
  
  Un caso particolare è la funzione di Ackermann a due argomenti $A(m,n)$, così definita:
  
  $A(m,n)={\begin{cases}n+1&{\mbox{se }}m=0\\A(m-1,1)&{\mbox{se }}m>0{\mbox{ e }}n=0\\A(m-1,A(m,n-1))&{\mbox{se }}m>0{\mbox{ e }}n>0.\end{cases}}$
  
  La funzione di Ackermann è un esempio di funzione ricorsiva che non è primitiva ricorsiva poiché cresce più velocemente di qualsiasi funzione ricorsiva primitiva.
  
  Il valore cresce molto rapidamente anche per valori molto piccoli di $m$ e $n$. Per esempio, $A(4,2)$ è un numero intero di 19 729 cifre. Per confronto, la costante di Avogadro ha solo 24 cifre.
  
  Il meccanismo di calcolo della funzione è estremamente semplice, quanto pesante dal punto di vista computazionale. La definizione data può essere vista come quella di una famiglia di funzioni al variare di un parametro individuato dalla prima variabile. Per ogni valore del parametro si ha una funzione che è ottenuta iterando la funzione precedente per un numero di volte individuato dalla seconda variabile. In quest'ottica le prime funzioni della famiglia sono funzioni familiari come l'addizione, la moltiplicazione e la potenza, seguite dalla tetrazione, e successivamente si hanno funzioni sempre più complesse:
  
      $f(0,y,z)=y+z$
      $f(1,y,z)=y\times z$ (mediante iterazione di $z+z+z+\ldots$ per $y$ volte)
      $f(2,y,z)=z^{y}$ (mediante iterazione di $z\times z\times z\times \ldots$ per $y$ volte)
      $f(3,y,z)=z^{z^{z^{.^{.^{.}}}}}$ ($y$ volte)(mediante iterazione di $z^{z^{z^{.^{.^{.}}}}}$ per $y$ volte e quindi mediante iterazione di $y\times z$ e quindi mediante iterazione di $y+z$)
  
  Risulta quindi una funzione con una complessità estremamente elevata anche per valori di input semplici.
  
  L'inversa della funzione di Ackermann, indicata con $\log ^{\ast }$ oppure $\alpha$, compare in alcune dimostrazioni di scienze informatiche, come nell'algoritmo union-find.
  
  