递归函数参数中前后递减的区别

Dig*_*til 2 c++ recursion pre-increment post-increment

我有以下示例代码,其中我使用预先减少

void function(int c)
{
  if(c == 0)
  {
     return;
  }
  else
  {
    cout << "DP" << c << endl;
    function(--c);
    cout << c << endl;
    return;
  }
}
Run Code Online (Sandbox Code Playgroud)

此函数为输入4提供输出:

 DP3
 DP2
 DP1
 DP0
 0
 1
 2
 3
Run Code Online (Sandbox Code Playgroud)

但是当我使用后减量时

void function(int c)
{
  if(c == 0)
  {
    return;
  }
  else
  {
    cout << "DP" << c << endl;
    function(c--);
    cout << c << endl;
    return;
  }
}
Run Code Online (Sandbox Code Playgroud)

输出与DP4无限循环

你能详细解释一下为什么会这样吗?

ice*_*y96 5

因为--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;
Run Code Online (Sandbox Code Playgroud)


Nip*_*dar 5

发生这种情况是因为函数(c--)将使用相同的c值调用,并且当它完成时c将递减.但由于它是递归调用的,因此它将被调用相同的值而没有返回的机会,最终你会遇到堆栈溢出错误.

假设这个,int x = 1,y = 0; 现在y = x ++将导致y == 1和x == 2.但是如果你做y = ++ x,那么bot x和y将是2.