递归函数参数中前递减和递减后之间的差异



我有以下示例代码,其中我使用了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.因此,该功能不会停止。 要了解--xx--之间的区别,您可以尝试以下代码:

int x = 5,y=5;
cout<<x--<<endl;
cout<<--y<<endl;
cout<<x<<" "<<y<<endl;

在递减后值会在递减之前传递的情况下,总是相同的值会传递给函数,它永远不会出来。

函数(c--),首先它调用函数(c)后递减c--将发生。

最新更新