Вот простая программа, которую я написал, чтобы найти все числа с неубывающими цифрами длины <= L, чьи цифры суммируют до N. Код работает нормально, но когда я пытаюсь синхронизировать время выполнения с помощью clock () из ctimeэто показывает странное поведение. </p>
#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;
}
Я записываю нет.тактов, прошедших до вызова функции «Генерировать» в // строке 1, и я делаю то же самое после // строки 2, разница в которой, как я считаю, должна дать мне «нет».тиковых часов в генерации нужных чисел.
Но если я сделаю это, то на мою функцию "Generate" как-то повлияет!Он не будет выводить числа в стандартный вывод (из // строки 4), и даже если я передам вектор для хранения сгенерированных чисел, он не сохранит никаких!
Однако, если я использую часы () в // строке 2 мой вывод на стандартный вывод в порядке, и указанный вектор V заполняется желаемым результатом.но clock () на // строке 2 бесполезен.
Что я не могу понять, так это как вызов clock () может повлиять на некоторую обработку в функции 'Generate', если, конечно, у меня нет неясной ошибки!или часы () не должны использоваться в такой рекурсивной установке?
Пожалуйста, помогите мне отладить это.