ここでは、長さが0以外のすべての桁数を見つけるために書いたシンプルなプログラムです。コードはうまく動作しますが、 ctimeからのclock()を使った実行時間は、奇妙な動作を示します。C++ clock()は再帰関数で奇妙な振る舞いをします
#include<iostream>
#include<vector>
#include<ctime>
using namespace std;
typedef long long int LL;
int Sum(LL S){
int sum=0;
for(;S;S/=10)
sum+=S%10;
return sum;
}
void Generate(LL S, int len, int N, int L, vector<LL> &V){
if(len<L)
for(int i=0;i<=9;++i)
if(i>=S%10)
Generate(S*10+i, len+1, N, L, V);
int sum = Sum(S);
if(sum!=N)
return;
else if(sum == N && len == L){
V.push_back(S);
cout << S << endl; //Line 4
return;
}
}
int main(){
int N,L;
vector<LL> V;
LL S;
cin >> N >> L;
clock_t start=clock(); //Line 1
Generate(S, 0, N, L, V);
//clock_t start=clock(); //Line 2
clock_t end = clock();
for(int i=0;i<V.size();++i)
cout << V[i] << " ";
cout << endl;
cout << "Run time: " << (double)(end-start)/CLOCKS_PER_SEC;
return 0;
}
私は記録しません。 // Line 1で "Generate"関数を呼び出す前に経過したクロックティックの数と、// Line 2で同じことをします。必要な数字を生成するのに経過したクロック・ティック数。
しかし、もし私が "Generate"の処理がどうにかして影響を受けるのです!それはstdoutに出力しません(// Line 4から)。生成された数値を格納するためにベクトルを渡しても、格納されません!
しかし、私が// Line 2でclock()を使用した場合、stdoutの出力は正常であり、参照されたベクトルVは目的の結果でいっぱいになります。 // line 2のclock()は役に立たない。
私が理解していないのは、clock()の呼び出しが、Generate関数の処理にどのように影響するのでしょうか?この種の再帰的なセットアップではclock()は使用されませんか?
私を助けてくださいこれをデバッグしてください。
oops!はい、あなたはその権利を得ました。ありがとうございました。 – srbhkmr