在以下代碼中,堆棧是否進入框架?如果num = 5。爲什麼我得到的輸出爲零..數字從5到1呢?如何讓堆棧在函數調用中工作?
void rec(int num)
{
cout << num << endl;
if(num > 0)
return rec(num-1);
cout << "after" << num << endl;
}
它包括堆棧的概念嗎?
在以下代碼中,堆棧是否進入框架?如果num = 5。爲什麼我得到的輸出爲零..數字從5到1呢?如何讓堆棧在函數調用中工作?
void rec(int num)
{
cout << num << endl;
if(num > 0)
return rec(num-1);
cout << "after" << num << endl;
}
它包括堆棧的概念嗎?
「爲什麼我得到的輸出作爲零」
看邏輯的,你發揮作用。 if(num>0)
- return rec(num-1);
。
因此,對於0
以上的每個節點,該函數將僅以num-1
再次調用自身。
而只有當num==0
你會得到這條線
cout<<"after"<<num<<endl;
也就是說每就會進入數,函數將什麼都不做,之前number-1
再次調用自身的cout<<"after"<<num<<endl;
線,並在最後時間它不會再稱它自己(因爲num > 0
條件是錯誤的),它將打印0
。
如果你想看到的「返回值」,你可以做這樣的事情:
void rec(int num)
{
cout << num << endl;
if(num > 0)
rec(num-1);
cout << "after" << num << endl;
}
的return rec(num-1);
在技術上是有效的,但因爲該函數實際上並不返回soemthing,這是一樣的寫作:
if (num > 0)
{
rec(num-1);
return;
}
您可以嘗試通過放置一些斷點來調試該示例。 –
你是什麼意思,你得到的輸出爲零? 'rec(n)'應該從n打印所有數字到0,然後是「after0」。如果這沒有發生在你身上,那就很奇怪了。 – sepp2k