2017-06-25 123 views
0
int main() 
{ 
    f(12345); 
    return 0; 
} 

void f(long n) 
{ 
    cout << n%10; 
    if(n!=0) 
    { 
     f(n/100); cout <<n%10; 
    } 
} 

我不明白爲什麼調用f(12345)打印出「5310135」,我剛開始學習遞歸,我不明白它是如何打印的。我編譯並運行了程序,以便知道它打印的值。我被困在5310,然後我不知道最後3位數字是怎麼出現的,有人可以給我解釋一下嗎?遞歸打印C++

+2

'n/100'試圖解釋這是做什麼。也解釋你爲什麼需要'cout << n%10;'兩次。 –

+0

它以n/100作爲參數調用函數f。 – poptartbr1

+0

沒有最後一個cout << n%10;該程序將只打印出5310,我想知道爲什麼它使用第二個cout打印出5310135。 – poptartbr1

回答

1

第二個cout將在遞歸展開時執行,即從上次遞歸調用到第一次遞歸調用。

f(12345)   
    print 5 
    f(123) ----------> f(123) 
    print 5    print 3 
          f(1) --------> f(1) 
          print 3    print 1 
               f(0) -----> f(0) 
               print 1   print 0 
1

答案在於if條件。在'if'裏面,調用f(n/100)來創建一個單獨的執行樹。這個單獨的執行樹完成後,立即調用下一條指令,在這種情況下分別爲1,3和5。 enter image description here