[英]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
但是當我使用后遞減
void function(int c)
{
if(c == 0)
{
return;
}
else
{
cout << "DP" << c << endl;
function(c--);
cout << c << endl;
return;
}
}
輸出與 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;
發生這種情況是因為 function(c--) 將使用相同的 c 值調用,並且當它完成時 c 將遞減。 但是由於它是遞歸調用的,因此它將以相同的值調用而沒有返回的機會,最終您將遇到堆棧溢出錯誤。
假設這樣,int x = 1, y = 0; 現在 y = x++ 將導致 y == 1 和 x == 2。但是如果你執行 y = ++x ,那么 bot x 和 y 將是 2。
如果后遞減值將在遞減之前傳遞,則始終將相同的值傳遞給函數,它永遠不會出來。
function(c--),首先調用 function(c),然后遞減 c-- 會發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.