我应该计算递归函数被调用的次数所以我试着创建一个全局变量让它在函数中被计数然后在main中调用它在main中它工作得很好但是当它在main中被调用时不知为什么它的值不会改变
#include <iostream>
using namespace std;
int y;
long fib(int n){
static int x = -1;
x++;
y = x;
cout << y << endl;
if (n == 1){
return 1;
}
else if (n == 0){
return 0;
}
else
return fib(n - 1) + fib(n - 2);
}
int main(){
int N, X;
cin >> N;
while (N != 0){
cin >> X;
cout << "fib(" << X << ") = " <<fib(X) << " calls = "<< y << endl;
N--;
}
system("pause");
}
行内:
cout << "fib(" << X << ") = " <<fib(X) << " calls = "<< y << endl;
fib(X)
与y
之间没有序列关系。编译器可以在调用fib(X)
之前或之后读取y
。(但不是在!)
修改为:
cout << "fib(" << X << ") = " << fib(X);
cout << " calls = "<< y << endl;
这是函数调用的实参之间没有排序规则的一个特例(请记住,重载操作符实际上是对重载操作符函数的调用)。例如,在func( a(), b() );
中,a
和b
可以按任意顺序调用。