Come nota, se si desidera utilizzare solo il modulo chiuso, gli algoritmi per m < 4 sono semplici. Se desideri estendere alla tetration, ti suggerisco di scrivere un algoritmo fastpower usando probabilmente il metodo binario e quindi con quel metodo puoi scrivere una funzione di tetration. Quale sarebbe simile:
int Tetration(int number, int tetrate)
{
long int product=1;
if(tetrate==0)
return product;
product=number;
while(tetrate>1)
{
product=FastPower(number,product);
tetrate--;
}
return product;
}
Poi si può coprire casi fino a n == 4 e dopo che usare la definizione ricorsiva ei valori di un overflow (5, n) ad un tasso ridicolo, quindi è davvero di nessuna preoccupazione. Sebbene il tuo insegnante probabilmente non sarà soddisfatto con un algoritmo come questo, ma funzionerà molto più velocemente. In una delle mie classi discrete quando ho chiesto di scrivere un algoritmo per calcolare i numeri di Fibonacci e poi trovare la sua O (n), ho scritto la forma chiusa e poi ho scritto O (1) e ho ottenuto pieno credito, alcuni professori apprezzavano risposte intelligenti.
Ciò che è importante notare della funzione Ackerman è essenzialmente definire l'heirachy delle funzioni additive sugli interi, A (1, n) è addizione, A (2, n) è moltiplicazione, A (3, n) è l'esponenziazione, A (4, n) è tetrazione e dopo il 5 le funzioni crescono troppo velocemente per essere applicabili a molto.
Un altro modo di guardare addizione, moltiplicazione, etc è:
Φ0 (x, y) = y + 1
Φ1 (x, y) = +(x, y)
Φ2 (x, y) = ×(x, y)
Φ3 (x, y) = ↑ (x, y)
Φ4 (x, y) = ↑↑ (x, y)
= Φ4 (x, 0) = 1 if y = 0
= Φ4 (x, y + 1) = Φ3 (x, Φ4 (x, y)) for y > 0
(Usa prefisso notazione cioè + (x, y) = x + y, (x, y) = x y.
questo ragazzo conosce la sua roba. –