Функция Аккермана не работает должным образом в 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 квантовые состояния. Идя по дороге, вы встретите своих двойников - точных двойников на квантовом уровне! Таким образом, у них будут точно такие же мысли, те же шрамы, зудящий локоть в том же месте. Они даже переваривают одну и ту же еду. Вы встретите миллиарды миллиардов миллиардов двойников. Для меня это действительно сногсшибательно.

Другие вопросы по тегам