これは私が扱っているコードです:
#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 秒ほどかかります。
何故ですか?
注: このプログラムの書き方が悪く、おそらく collatzLength で 'static' を使用したり、その関数にキャッシュを使用したりするべきではないことは承知していますが、このコードを改善する方法については興味がありません。なぜ閉じるのにそんなに時間がかかるのか興味深い。