c++ - 递归和预递减运算符

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

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

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

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

最佳答案

首先要注意的是:在 C++ 中,如果您不在 if 之后放置括号声明,只有下一行会出现在声明中。

示例:

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

在这里cout << 2无论 x 的值如何,总是会被执行

正确的写法是

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

else 同样如此声明 所以这是为了括号。

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

希望对您有所帮助!

关于c++ - 递归和预递减运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017262/

相关文章:

c++ - 是否有必要锁定 STL 容器以读取其数据?

c++ - 我应该避免在这里使用 goto 吗?如果是这样,怎么做?

c - 在函数参数中使用 union

c++ - 计算 n 个数字之和的递归函数的意外输出

c - 递归函数和pthreads

powershell - 递归计算子文件夹中的文件

C++ 通过 [""] 或 [int] 访问自定义类组件

C++ - 对`vtable(构造函数)的 undefined reference

c++ - 将自定义命令行参数传递给 Rust 测试

function - 这是成语 Scala.使用 def 来缩短语句?