繁体   English   中英

C ++ clock()与递归函数怪异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM