使用前缀减量的c ++程序中的递归因子

时间:2018-03-31 16:10:25

标签: recursion

为什么这个递归代码失败了? 它失败了,因为它没有正确计算阶乘(这只是递归函数,你知道),即如果我运行" factorial(3)"它会产生" 2&# 34;而不是" 6" (阶乘(3)是6,而不是2)。所以它有一个bug,不是吗?

int factorial(int n){
    if(n>1) return n*factorial(--n);
    else return 1;    
}

如果我使用n-1而不是--n,它修复了错误? - >而且,如果我使用n--,我会创建一个无限循环 我真的不明白

1 个答案:

答案 0 :(得分:2)

使用同一表达式中变量(--n)的值修改(n*)和其他位置Undefined Behavior