Ackermann函数在C++中无法正常工作

4 c++ ackermann

在我的Ackermann功能的家庭工作中,我已经解决了以下问题

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";
    }   
}
Run Code Online (Sandbox Code Playgroud)

这个函数适用于低于m = 3和n = 10的低值但是当我给出m = 4 /更高或n = 15 /更高时,这不起作用.我没有出局.程序退出时没有任何警告或错误或结果.

请一些人告诉我这种情况发生的原因以及如何解决这个问题.

Luk*_*don 7

这个数字(4, 15)是如此之大,无法计算和表示.看看价值表.例如(4, 2),比可观察宇宙中的粒子数量大几个数量级!

我有类似的功课.重点是告诉你一些东西是如何成长的.与阿克曼函数相比,人类在指数生长方面存在问题.

对大数字的思考可以得出有趣的结论.想象一下,你正沿着2^2^65536 - 3 长达数米的道路行走(那是ackermann(4, 3)).假设平均人体大致相等于1m^3它有10^10^70 量子态.沿着这条路走下去,你将遇到你的分身 - 在量子水平上确切的分身!所以他们会在同一个地方有同样的想法,同样的伤疤,痒肘.他们甚至会消化同样的食物.你将遇到数十亿数十亿美元的分身.对我来说,这真的令人兴奋.

  • 谢谢@lukas.我打印了多少次迭代,我发现它只是(3,9). (2认同)