Функция Аккермана не работает должным образом в C++
В моей домашней работе функции Аккермана я решил проблему следующим образом
int main()
{
int y = ack(4,1);
cout<<"ans is :::: "<< y;
getch();
return 0;
}
int ack(int m, int n)
{
if(m == 0)
{
return n+1;
}
else if(m > 0 && n == 0)
{
return ack(m-1,1);
}
else if(m > 0 && n>0)
{
int x = ack(m,n-1);
return ack(m-1,x);
}
else
{
cout<< "did not worked properly";
}
}
Эта функция прекрасно работает с низкими значениями до m=3 и n = 10. Но когда я даю m = 4/ выше или n = 15/ выше, это не работает. Я не выкладываюсь. Программа просто выйдет без предупреждения, ошибки или результата.
Пожалуйста, кто-нибудь объяснит мне причину, по которой это происходит, и как я могу решить эту проблему.
1 ответ
Число (4, 15)
такое большое число, которое невозможно рассчитать и представить. Посмотрите на таблицу ценностей. Например (4, 2)
на порядки больше, чем количество частиц в наблюдаемой вселенной!
У меня была похожая домашняя работа. Весь смысл в том, чтобы показать вам, как безумно что-то может расти. У людей есть проблема экспоненциального роста, который бледен по сравнению с функцией Аккермана.
Размышление о больших числах может привести к интересным выводам. Представь, ты идешь по дороге, которая 2^2^65536 - 3
метров (это ackermann(4, 3)
). Предполагая, что средний человеческий организм примерно равен 1m^3
у него есть 10^10^70
квантовые состояния. Идя по дороге, вы встретите своих двойников - точных двойников на квантовом уровне! Таким образом, у них будут точно такие же мысли, те же шрамы, зудящий локоть в том же месте. Они даже переваривают одну и ту же еду. Вы встретите миллиарды миллиардов миллиардов двойников. Для меня это действительно сногсшибательно.