2013-08-03 31 views
0

在以下代碼中,堆棧是否進入框架?如果num = 5。爲什麼我得到的輸出爲零..數字從5到1呢?如何讓堆棧在函數調用中工作?

void rec(int num) 
{ 
    cout << num << endl; 
    if(num > 0) 
     return rec(num-1); 
    cout << "after" << num << endl; 
} 

它包括堆棧的概念嗎?

+0

您可以嘗試通過放置一些斷點來調試該示例。 –

+0

你是什麼意思,你得到的輸出爲零? 'rec(n)'應該從n打印所有數字到0,然後是「after0」。如果這沒有發生在你身上,那就很奇怪了。 – sepp2k

回答

1

「爲什麼我得到的輸出作爲零」

看邏輯的,你發揮作用。 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

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; 
} 
相關問題