Ela cresce muito rapidamente e mesmo pequenos valores de entrada como (4,2) geram números com muitos dígitos.
A função de Ackermann para duas variáveis é definida utilizando recursão:
Tentar calcular num computador para valores maiores que (3,3) pode consumir muitos recursos devido ao excesso de chamadas recursivas.
Eu implementei no Scilab o cálculo de 32 pontos, isso foi o máximo que consegui para preencher uma matriz antes dos problemas de recursão. Por exemplo, para os valores (4,1) ou (5,0) já não é possível o cálculo.
Com os dados obtidos, gerei um gráfico 3d.
Segue o código:
function h = ack(a, b)
if(a==0) then
h = b+1
elseif (b==0) then
h = ack(a-1, 1)
else
tmp = ack(a, b-1)
h = ack(a-1, tmp)
end
endfunction
xmax = 3
ymax = 7
x = [0:1:xmax]
y = [0:1:ymax]
z = zeros(xmax, ymax)
for i=0:xmax
for j=0:ymax
z(i+1, j+1) = ack(i, j)
end
end
plot3d(x,y,z, theta = 225, alpha = 1)
A matriz com os dados (m X n):
1. 2. 3. 4. 5. 6. 7. 8.
2. 3. 4. 5. 6. 7. 8. 9.
3. 5. 7. 9. 11. 13. 15. 17.
5. 13. 29. 61. 125. 253. 509. 1021.
E seu correspondente gráfico:
Mais perto, vemos os primeiros valores pequenos e depois um "salto":