递归函数参数中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
。所以函数不会停止。
想知道--x
和x--
的区别可以试试下面的代码:
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.
我有以下示例代码,其中我使用了预递减
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
。所以函数不会停止。
想知道--x
和x--
的区别可以试试下面的代码:
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.