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可以变化.
经验法则:永远不要使用变量,你在一个表达式中递增/递减两次.
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |