我有这个功能:
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/