0

アッカーマン関数1を実行しようとしていますが、問題が発生しています。Windows 10 マシンでコマンド プロンプトからプログラムを実行しようとしていますが、値のペア (4,0) に達してから数秒後にプログラムが停止します。利用可能なリソースが不足しているためと推測していますが、まったくわかりません。この問題を解決する方法はありますか? ティア。

MinGw G++ コンパイラ [8.1.0] を使用しています。

問題のコードもここにあります。

#include <iostream>
#include <ctime>

int ack(int m, int n)
{
    int ans;
    if (m == 0)
        ans = n + 1;

    else if (n == 0)
        ans = ack(m - 1, 1);

    else
        ans = ack(m - 1, ack(m, n - 1));

    return ans;
}

void runAck(time_t start) 
{
    int answer;
    double seconds;
    time_t now_t;

    for(int i = 0; i <= 6; i++)
    {
        for(int j = 0; j<= 6; j++)
        {
            answer = ack(i, j);
            time(&now_t);
            seconds = difftime(now_t, start);
            printf("Ackermann(%i, %i) is %i. Found in %.3f seconds.\n", i, j, answer, seconds);
        }
    }
}

int main()
{
    std::cout << "Testing of the Ackermann recursion." << std::endl;
    time_t start = time(NULL);
    runAck(start);
    
    return 0;
}

最初はVSCodeを使ってコマンドプロンプトにアクセスしていたからだと思っていたのですが、そのまま使っても変化なし。この質問を書いている間、違いがあるかどうかを確認するために、別の OS または Ubuntu を試してみることを考えました。

私の目標は、(4,1) に到達して、計算がどれだけ速くなったかを確認することです。

1アッカーマン関数は、再帰的にしか計算できない関数を作成するためにコンピューター理論として開発された再帰関数です。

編集 1 @MikeCAT は、私が本当に求めていることを理解し、質問に答えてくれました。

4

0 に答える 0