5

これは私が扱っているコードです:

#include <iostream>
#include <map>

using namespace std;

static unsigned long collatzLength(unsigned long n) {
    static std::map<unsigned long,int> collatzMap;
    int mapResult = collatzMap[n];
    if (mapResult != 0) return mapResult;

    if (n == 1) {
        return 1;
    } else { 
        collatzMap[n] = 1 + collatzLength(n%2==0?n/2:3*n+1);
        return collatzMap[n];
    }
}

int main() {
    int maxIndex = 1;
    unsigned int max = 1;
    for (int i=1; i<1000000; i++) {
        //cout<<i<<endl;
        unsigned long count = collatzLength(i);
        if (count > max) {
            maxIndex = i;
            max = count;
        }
    }
    cout<<maxIndex<<endl;
    getchar();
    cout<<"Returning..."<<endl;
    return maxIndex;
}

このプログラムをコンパイルして実行すると (Visual Studio 2012 およびリリース ビルド設定を使用)、プログラムが "Returning..." を出力した後、(私のコンピューターでは) 閉じるのに 10 秒ほどかかります。

何故ですか?

注: このプログラムの書き方が悪く、おそらく collat​​zLength で 'static' を使用したり、その関数にキャッシュを使用したりするべきではないことは承知していますが、このコードを改善する方法については興味がありません。なぜ閉じるのにそんなに時間がかかるのか興味深い。

4

5 に答える 5

4

スタートアップ プロジェクトのプロジェクト設定の [デバッグ] セクションに移動します。_NO_DEBUG_HEAP=1セクションに入りEnvironmentます。リリースモードでもこれを行う必要があります。

于 2013-08-20T17:30:24.283 に答える
0

VS 2012 リリース ビルドを使用して自分のマシンで試してみました。「戻る」後、プログラムを閉じるのに2秒もかかりません

于 2013-08-20T16:03:42.477 に答える