В качестве примечания, если вы хотите просто использовать закрытую форму, то алгоритмы для m <4 просты. Если вы хотите перейти к тетратации, то я предлагаю вам написать алгоритм fastpower, возможно, с использованием бинарного метода, а затем с помощью этого метода вы можете написать функцию тетратации. Который будет выглядеть примерно так: </p>
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;
}
Тогда вы можете охватить случаи до n == 4, и после этого использовать рекурсивное определение и значения переполнения A (5, n) со смешной скоростью, так что это действительно не имеет значения. Хотя ваш учитель, вероятно, не будет удовлетворен таким алгоритмом, но он будет работать намного быстрее. В одном из моих отдельных классов, когда я попросил написать алгоритм для вычисления чисел Фибоначчи, а затем найти его O (n), я написал закрытую форму, а затем написал O (1) и получил полный кредит, некоторые профессора ценят умные ответы.
Что важно отметить в отношении функции Аккермана, так это то, что она по существу определяет иерархию аддитивных функций на целых числах, A (1, n) - сложение, A (2, n) - умножение, A (3, n) - Возведение в степень, A (4, n) является тетрацией, и после 5 функции растут слишком быстро, чтобы быть применимыми к очень многим.
Другой способ взглянуть на сложение, умножение и т. Д .:
Φ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
(Используется префиксная нотация, т. Е. + (X, y) = x + y, (x, y) = x y.