我有以下示例代码,其中我使用了预先减少
void function(int c)
{
if(c == 0)
{
return;
}
else
{
cout << "DP" << c << endl;
function(--c);
cout << c << endl;
return;
}
}
此函数为输入4提供输出:
DP3
DP2
DP1
DP0
0
1
2
3
但是当我使用后减法时
void function(int c)
{
if(c == 0)
{
return;
}
else
{
cout << "DP" << c << endl;
function(c--);
cout << c << endl;
return;
}
}
输出与DP4无限循环
你能详细解释一下为什么会这样吗?
答案 0 :(得分:5)
由于--c
将返回c-1
,但c--
会返回c
。因此,当您使用function(c--)
时,等于function(c);c = c-1;
。{{ 1}}永远不会是c
。所以函数不会停止。
要了解0
和--x
之间的区别,您可以尝试以下代码:
x--
答案 1 :(得分:5)
这是因为函数(c--)将使用相同的c值调用,并且当它完成时c将递减。但由于它是递归调用的,因此它将被调用相同的值而没有返回的机会,最终你会遇到堆栈溢出错误。
假设这个,int x = 1,y = 0;现在y = x ++将导致y == 1和x == 2.但是如果你做y = ++ x,那么bot x和y将是2。
答案 2 :(得分:1)
如果后递减值将在递减之前传递,则总是将相同的值传递给函数,它永远不会出现。
函数(c--),首先它调用函数(c)后来递减c--将会发生。