需要一个关于递归的新观点

Joh*_*ord 0 c++ recursion

我无法绕过这个. 当第4行看起来相同时
,为什么这两个函数会产生截然不同的结果
呢?

版本I

int factorial(int val) // input=5; output=120
{
    if (val != 0)
        return factorial(val - 1) * val;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

版本II

int factorial(int val) // input=5; output=0
{
    if (val != 0)
        return factorial(--val) * val;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 6

如果你不读它们,它们似乎只是相同 - 一个说val - 1,另一个说--val.

  • val - 1:减法.评估val减去1 的值
  • --val:减少.减val1,并计算新值

后一个示例具有未定义的行为,因为您尝试val在同一行上再次读取.