我通过引用调用以下方式定义的阶乘函数.
int factorial(int &n) {
n--;
if (n>0) return factorial(n)*(n+1);
else return 1;
}
Run Code Online (Sandbox Code Playgroud)
当我传递值5时,它返回值1,正如我所期望的那样.但是当我以下面的方式定义阶乘函数时,它返回5的阶乘,即120.
int factorial(int &n) {
n--;
if (n>0) return (n+1)*factorial(n);
else return 1;
}
Run Code Online (Sandbox Code Playgroud)
我推测表达式是按线性顺序计算的,当在表达式中调用一个函数时,存储局部变量的所有值和到目前为止在原始表达式中已经计算过的组件表达式,并且当函数将控制权返回给调用者这些保留的值用于计算表达式而不是它们的修改值.
我的假设是否正确?请赐教.