递归和预递减运算符

Recursion and pre-decrement operator

我有这个功能:

void m(int n)
{
    if(n > 0)
      m(--n);
      cout << n << " "; //for n = 5 --> output is: 0 0 1 2 3 4
}

我无法理解它的工作原理。 例如:

n(输入)= 5

输出:0 0 1 2 3 4

我的问题是:为什么两次显示零?

当我像这样添加括号时:

void m(int n)
{
    if(n > 0)
    {
        m(--n);
        cout << n << " "; // now, it shows 0 1 2 3 4 (n = 5)
    }
}

那么,这段代码中的什么括号导致“0”只存在一次?

当我将预递减 (--n) 更改为 post-递减 (n--) 时,它什么也没显示。为什么?

有人可以帮助我了解它是如何工作的吗?

首先要注意的是:在 C++ 中,如果您不在 if 语句后放置方括号,则语句中只会包含下一行。

示例:

if(x > 0)
   cout << 1;
   cout << 2;

这里cout << 2不管x

的值是什么都会被执行

正确的写法是

if(x > 0)
{
  cout << 1;
  cout << 2;
}

else 语句也是如此 所以这是括号。

我对 post 减量的疯狂猜测如下: 如果你这样做 m(n--),传递的值将为 5,n 的值只会在函数调用后发生变化 并超出范围(所以这无关紧要) .所以会发生无限次的 m(5) 调用,这就是什么都没有出现的原因。 (我不确定那部分所以如果错了请告诉我)!

希望对您有所帮助!

您似乎对 Python 语法感到困惑,其中 if 的范围由缩进决定。在 C(以及 C++、C#、Java 和许多其他语言)中,范围是一个语句(以 ; 结尾),除非您使用大括号 {}。在代码的第一个变体中,cout << n << ... 将始终执行,而不管 n 的值如何。在第二个变体中,它将仅执行 if(n > 0)