我应该计算调用递归函数的次数,所以我试图创建一个全局变量使其在函数中计数然后在函数中调用它,它完美地工作但是当它在main中以某种方式调用它的值时不改变dunno的原因
#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");
}
答案 0 :(得分:3)
在行中:
cout << "fib(" << X << ") = " <<fib(X) << " calls = "<< y << endl;
fib(X)
和y
之间没有排序关系。允许您的编译器在调用y
之前或之后阅读fib(X)
。 (但不是在期间!)
要解决此问题,请更改为:
cout << "fib(" << X << ") = " << fib(X);
cout << " calls = "<< y << endl;
这是规则的特殊情况,即函数调用的参数之间没有排序(请记住,重载的运算符实际上是对重载的运算符函数的调用)。例如,在func( a(), b() );
中,可以按任意顺序调用a
和b
。