После недавнего ответа на вопрос, касающийся функции Аккермана, часть которой включала функцию для вычисления тетратации числа. Что заставило меня задуматься, есть ли более эффективный способ сделать это. Я провел некоторое тестирование самостоятельно, но я ограничен главным образом тем, что даже число, такое как 5 ^^ 3 = 5 ^ 3125 при 5 ^ 3, примерно равно 10 ^ 2, что означает 5 ^ 3125 ~ = 10 ^ (3125 * 2/3) около 2000 цифр.
Функция не подходит для разделения и завоевания методов из-за характера возведения в степень, т. Е.:
2 ^^ 5 = 2 ^ (2 ^ (2 ^ (2 ^ 2)))) = 2 ^ (2 ^ (2 ^ 4)) = 2 ^ (2 ^ 16) = 2 ^ 65536 ~ = 10 ^ (65536 * 3/10), около 20 тыс. Цифр ...
Природа проблемы, поскольку она начинается с вершины дерева власти и работает вниз, мне кажется факториальной. Очевидно, что для выполнения операции возведения в степень можно использовать алгоритм быстрой мощности, но я не смог найти способ уменьшить количество возведения в степень.
В случае, если кому-то неясно, о чем я говорю, вот статья вики , по сути, хотя тетрация это:
a ^^ b = a ^ a ^ a .... ^ a, b раз, а затем начинаем возведение в степень в верхнем элементе дерева сил и спускаемся вниз.
Алгоритм, который я сейчас использую, будет (хотя я использую версию ruby, если мне действительно нужны значения):
long 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;
}
Любые мысли приветствуются.