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无限循环
你能详细解释一下为什么会这样吗?
因为--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)
发生这种情况是因为函数(c--)将使用相同的c值调用,并且当它完成时c将递减.但由于它是递归调用的,因此它将被调用相同的值而没有返回的机会,最终你会遇到堆栈溢出错误.
假设这个,int x = 1,y = 0; 现在y = x ++将导致y == 1和x == 2.但是如果你做y = ++ x,那么bot x和y将是2.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |