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"函数之前,我会记录所经过的时钟节拍数,之后在//第2行也会记录,我认为这两者的差值应该会给出生成所需数字所经过的时间节拍数。
但如果我这样做,我的函数"生成"的处理会受到影响!它不会将数字输出到stdout(从//第4行),即使我传递一个向量来存储生成的数字,它也不会存储任何数字!
但是,如果我在//第2行使用clock(),我在stdout上的输出是好的,并且引用的向量V会被所需的结果填满。但是//第2行上的clock()没有用
我不明白的是,对clock()的调用如何影响"Generate"函数中的一些处理,当然,除非我有一些模糊的Bug!或者clock()不应该用于这种递归设置?
请帮我调试这个。
我得到变量S在您的代码中没有初始化就被使用了。确实,您需要在一开始就将其初始化为0。从那时起,行为是不可预测的-因此,有时你可能会得到正确的答案,但我对此表示怀疑。这不取决于clock()
的调用。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 任何人都可以查明我的递归函数中的错误吗?
- 递归函数的返回类型推导
- 递归函数调用在后台工作
- C++clock()在递归函数中表现怪异