C中的递归与Pre增量

dha*_*0us 0 c recursion

int fact_rec(int n)
{
    printf("%d\n",n);
    if(n==1) return n;
    else return fact_rec(--n)*n;
    //else return n*fact_rec(--n); gives same result
    //correct output comes for n*fact(n-1)
}
Run Code Online (Sandbox Code Playgroud)

在上面的阶乘函数的递归实现中, fact_rec(5)返回24.然而,如果我使用 n*fact_rec(n-1) 代替 n*fact_rec(--n) 输出是正确的:120.此外,无论我是否使用 n*fact_rec(--n)fact_rec(--n)*n.我使用n*fact_rec(--n) 或 不是很重要 fact_rec(--n)*n吗?

并且在所有情况下输出都不应该是120?

qrd*_*rdl 19

return fact_rec(--n)*n
Run Code Online (Sandbox Code Playgroud)

很危险 参数计算的顺序是用C未定义(除&&,||,逗号和三元运营商)为第二次出现这样的值n可以变化.

经验法则:永远不要使用变量,你在一个表达式中递增/递减两次.