C++clock()在递归函数中表现怪异

C++ clock() behaving weirdly with recursive function

本文关键字:递归函数 C++clock      更新时间:2023-10-16

下面是我编写的一个简单程序,用于查找长度<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"函数之前,我会记录所经过的时钟节拍数,之后在//第2行也会记录,我认为这两者的差值应该会给出生成所需数字所经过的时间节拍数。

但如果我这样做,我的函数"生成"的处理会受到影响!它不会将数字输出到stdout(从//第4行),即使我传递一个向量来存储生成的数字,它也不会存储任何数字!

但是,如果我在//第2行使用clock(),我在stdout上的输出是好的,并且引用的向量V会被所需的结果填满。但是//第2行上的clock()没有用

我不明白的是,对clock()的调用如何影响"Generate"函数中的一些处理,当然,除非我有一些模糊的Bug!或者clock()不应该用于这种递归设置?

请帮我调试这个。

我得到变量S在您的代码中没有初始化就被使用了。确实,您需要在一开始就将其初始化为0。从那时起,行为是不可预测的-因此,有时你可能会得到正确的答案,但我对此表示怀疑。这不取决于clock()的调用。