我有这个功能:
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--)时,它什么也没有显示。为什么呢?
有人可以帮我理解它是如何工作的吗?
答案 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)