我有以下示例代码,其中我使用了pre-decrement
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 无限循环
你能详细解释我为什么会这样吗?
发生这种情况是因为函数(c--)将以相同的c值调用,并且当它完成时,c将递减。但是由于它是递归调用的,因此它将使用相同的值调用,没有返回的机会,最终您将遇到堆栈溢出错误。
假设这个,int x = 1,y = 0;现在 y = x++ 将产生 y == 1 和 x == 2。但是如果你做 y = ++x ,那么机器人 x 和 y 将是 2。
因为--c
会返回c-1
,但是c--
返回c
。所以当你使用function(c--)
等于function(c);c = c-1;
.c
永远不会0
.因此,该功能不会停止。 要了解--x
和x--
之间的区别,您可以尝试以下代码:
int x = 5,y=5;
cout<<x--<<endl;
cout<<--y<<endl;
cout<<x<<" "<<y<<endl;
在递减后值会在递减之前传递的情况下,总是相同的值会传递给函数,它永远不会出来。
函数(c--),首先它调用函数(c)后递减c--将发生。