2014-12-06 144 views
-3

這可能看起來像一個愚蠢的問題,但我不明白這些功能之間的區別。將這兩個設置爲0,爲什麼xxx()打印0,2,4,6,4,2,0和xxy()打印常規0,1,2,3,4,5。我要問的問題是,爲什麼XXX()降低它擊中允許「6」c輸出混淆

void xxx(int N) 
{ 
    cout << N; 
    if (N < 5) 
    { 
     xxx(N + 2); 
     cout << N;; 
    } 
} 
void xxy(int N) 
{ 
    cout << N; 
    if (N < 5) 
     xxy(N + 1); 
} 

int main() 
{ 
    xxx(0); 
    xxy(0); 

} 
+0

你可能想檢查遞歸如何工作。獲得更好的理解。 – learningToCode 2014-12-06 04:03:40

+0

@learningToCode您的意思是什麼?我失去了一些根本不是我? – nick 2014-12-06 04:05:14

+2

使用調試器逐行逐行執行代碼。它會幫助你更好地理解發生的事情。 – 2014-12-06 04:08:29

回答

0

嗯......收費atención這裏的最大值後:

cout << N; 
if (N < 5) 
{ 
    xxx(N + 2); 
    cout << N; 
} 

當我們有一個遞歸調用xxx(N + 2)當前的「迭代」被堆疊起來以啓動新的功能。然後當函數結束時,以前的迭代正常進行。

因此,當達到最大值(6)時,該迭代將結束,繼續前面的「迭代」的結果...在此前次迭代中,N值爲4 ...將顯示該值並且這個迭代將結束,繼續在前面的迭代中的N的cout將會是2等等......

在第二個函數中注意到在xxy遞歸調用之後沒有cout,但是如果你把它,會顯示類似的行爲。

我希望你能理解我......問候