递归和预减量运算符
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(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)
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 交换运算符 + 重载会导致无限递归
- 递归中三元运算符的奇怪行为
- 如何使用common_type和模板递归类型重载运算符+
- 运算符重载流提取运算符 (>>) C++会导致无限递归流提取
- 使用条件运算符递归计算模板化值或函数时出现错误 C1202(堆栈溢出)
- 在可变参数模板中使用 sizeof 运算符跳过递归结束的函数
- 在映射中插入地址时,新运算符重载会导致无限递归
- VC2013 移动运算符不递归执行移动
- 运算符>的递归应用
- Visual Studio 2008 运行时堆栈溢出警告,当运算符在所有路径上<递归时警告
- 重载赋值运算符导致递归警告
- 重载放置运算符 (<<),用于递归打印出数组的元素C++
- >> 运算符重载函数无限递归
- 运算符[]递归
- decltype,重载运算符的递归类型推导
- 递归和预减量运算符