Я попытался запрограммировать функцию Ackermann на своем ноутбуке (Win10), однако программа потерпела крах при более высоких значениях вместо того, чтобы продолжать вычислять в течение нескольких минут или часов.
Мой друг пробовал тот же код на своем компьютере(SUSE), и он работал просто отлично, затем мы попробовали его на школьном сервере (CentOS), и он снова рухнул.
РЕДАКТИРОВАТЬ: Он работал и на сервере, просто нужна была вторая попытка.Он также работал на другом сервере, который мы пробовали ... Все это в Linux.
Мы подозреваем, что переполнение стека стоит за этим, но это странно, потому что значения еще не слишком высокие.Как я могу тогда выполнить рекурсивные функции в этой системе?
Спасибо за все ответы.Мне просто любопытно, почему это происходит и как заставить это работать на моей машине.
Я пытался использовать C и C ++ без изменений.
#include <stdio.h>
int ackermann (int m, int n);
int main () {
int m = 4;
int n = 1;
return ackermann(m,n);
}
int ackermann (int m, int n)
{
if (m == 0) return n=n+1;
else if (m > 0 && n == 0) return ackermann(m-1,1);
else if (m > 0 && n > 0) return ackermann(m-1,ackermann(m,n - 1));
}