递归和预减量运算符



我有这个函数:

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

我有一个问题,理解它是如何工作的。例如:

n(input) = 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)更改为后减量(n——)时,它没有显示任何内容。为什么?

谁能帮我理解它是如何工作的?

首先要注意的是:在c++中,如果你没有在if语句后面加上括号,那么只有下一行会出现在语句中。

的例子:

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

无论x

的值是多少,cout << 2都会被执行

正确的写法是

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

同样的事情也适用于else语句这就是括号

我对后减量的大胆猜测如下:如果你做m(n--),传递的值将是5,n 的值只会在函数调用之后改变,并且超出作用域(所以它无关紧要)。所以会发生无限次的m(5)次调用这就是为什么什么都没有出现。(我不确定那部分,如果有错请告诉我)!

希望有帮助!

看起来您与Python语法混淆了,其中if的范围由缩进决定。在C(以及c++、c#、Java和许多其他语言)中,作用域是一个语句(以;结束),除非您使用花括号{}。在代码的第一个变体中,无论n的值如何,都将始终执行cout << n << ...。在第二个变体中,它将只执行if(n > 0)

最新更新