递归和预递减运算符
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)
我有这个功能:
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)