递归和预递减运算符

时间:2016-06-24 15:44:10

标签: c++ function recursion decrement

我有这个功能:

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)
    }
}

那么,这段代码中的括号是什么,&#34; 0&#34;只存在一次?

当我将预减量(--n)改为后减量(n--)时,它什么也没有显示。为什么呢?

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

2 个答案:

答案 0 :(得分:7)

首先要注意的是:在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)次调用,这就是为什么没有出现的原因。 (我不确定那部分所以请告诉我,如果错了)!

希望它有所帮助!

答案 1 :(得分:4)

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