4

在我的阿克曼函数的家庭工作中,我解决了以下问题

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/above 或 n = 15/above 时,这不起作用。我没有输出。程序直接退出,没有任何警告、错误或结果。

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

4

1 回答 1

7

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

我有类似的作业。关键是要向您展示某些东西可以疯狂地增长。与阿克曼函数相比,人类难以理解指数增长。

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

于 2012-06-24T13:11:42.017 回答