递归函数参数中pre和post递减之间的区别

Difference between pre and post decrement in recursive function argument

我有以下示例代码,其中我使用了预递减

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

但是当我使用 post 递减

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

输出进入 DP4 无限循环

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

因为--c会returnc-1,但是c--returnc。所以当你使用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;

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

function(c--), 首先它调用 function(c) 然后递减 c-- 会发生。

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

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