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 に答える