[英]C++ clock() behaving weirdly with recursive function
这是我编写的一个简单程序,用于查找长度<= L的所有非递减数字,其数字总和为N。代码可以正常工作,但是当我尝试使用ctime中的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;
}
我记录下编号。 在第1行调用“ Generate”函数之前已经经过了30分钟的时钟滴答,之后在//第2行执行了相同的操作,我相信这两者的区别应该给我以否。 生成所需数字时经过的时钟滴答声。
但是,如果这样做,我的函数“ Generate”的处理就会受到影响! 它不会将数字输出到stdout(//第4行),即使我传递矢量来存储生成的数字,它也不会存储任何数字!
但是,如果我在//第2行上使用clock(),则我在stdout上的输出就可以了,并且参考向量V充满了所需的结果。 但是//第2行上的clock()没有用。
我无法理解的是,对Clock()的调用如何影响“ Generate”函数中的某些处理,除非我当然有一些晦涩的Bug! 还是在这种递归设置中不应该使用clock()?
请帮我调试一下。
我得到的是使用变量S而未在您的代码中对其进行初始化。 确实,您需要从一开始就将其初始化为0。 从那时起,这种行为是无法预测的-因此您可能会不时得到正确的答案,但我对此表示怀疑。 它不依赖于clock()
的调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.