我有这个函数:
void m(int n)
{
if(n > 0)
m(--n);
cout << n << " "; //for n = 5 --> output is: 0 0 1 2 3 4
}
我有一个问题,理解它是如何工作的。例如:
n(input) = 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;
无论x
的值是多少,cout << 2
都会被执行正确的写法是
if(x > 0)
{
cout << 1;
cout << 2;
}
同样的事情也适用于else
语句这就是括号
我对后减量的大胆猜测如下:如果你做m(n--)
,传递的值将是5,n 的值只会在函数调用之后改变,并且超出作用域(所以它无关紧要)。所以会发生无限次的m(5)次调用这就是为什么什么都没有出现。(我不确定那部分,如果有错请告诉我)!
希望有帮助!
看起来您与Python语法混淆了,其中if
的范围由缩进决定。在C(以及c++、c#、Java和许多其他语言)中,作用域是一个语句(以;
结束),除非您使用花括号{
和}
。在代码的第一个变体中,无论n
的值如何,都将始终执行cout << n << ...
。在第二个变体中,它将只执行if(n > 0)