Dim*_* Nt 4 c++ recursion reference
int f(int &x, int c)
{
c = c - 1;
if (c == 0) return 1;
x = x + 1;
return f(x, c) * x;
}
int x = 5;
cout << f(x,5);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,可供选择的四个可能答案是:
函数f(int&x,int c)在第一次调用之后被调用四次,然后到达返回结果为6561的基本情况.我的猜测是3024,但我错了.即使通过引用传递的x变量在每次调用f(int&x,int c)时递增并分别取值6-> 7-> 8-> 9,此递归的最终结果等于9 ^ 4.所以我的问题是:变量x通过引用传递,当它到达基本情况时等于9.这是否意味着递归的所有阶段都将具有变量x的这个值,即使它们在被调用时具有不同的值?
不,有四个以上的答案可供选择.
取指令的x用于递归函数调用,并且取的x乘法的右手侧,不与彼此测序; 因此,评估顺序未指定.
这并不意味着评估订单将是某个特定的评估订单,而且只需要弄清楚它.这意味着最终结果可以:
根据编译器的不同而不同.
每次执行此程序时都会发生变化.
对于每个单独的递归调用,评估顺序也可以是不同的.每个递归调用也可以最终使用不同的评估顺序."未指定"表示"未指定".任何可能性都会发生.每个人的时间.
我没有在这里计算所有实际可能性.最好将自己的时间投入到应该正常工作的事情上,而不是放在显然无法正常工作的事情上.
如果您需要特定的评估订单,它将是:
int y=x;
return f(x, c) * y;
Run Code Online (Sandbox Code Playgroud)
或这个:
int y=f(x, c);
return y * x;
Run Code Online (Sandbox Code Playgroud)
现在指定此评估顺序.