2016-11-10 141 views
1

程序是關於函數的遞歸,需要知道如何控制對整個程序C語言遞歸控制

void count(int n) 
{ 
    static int d=1; 
    printf("%d",n); 
    printf("%d",d); 
    d++; 
    if(n>1) 
    count(n-1); 
    printf("%d",d); 
} 

void main() 
{ 
    count(3); 
} 

我的預期輸出是

3122134 

原始輸出

312213444 

任何人都可以請解釋這些額外的兩個4如何添加到輸出?

請解釋一下關於這個程序的流程控制。

+0

檢查計數(1)後打印計數(2)和計數(3) – mvs

+4

後函數是否返回使用調試程序並逐行執行代碼,並進入遞歸調用。 –

+0

@mvs當n等於3,2 ,, 1時,函數會調用它自己,並且對於每個調用它在最後一條語句中輸出d。所以你在輸出的尾部得到444。 –

回答

3

在這裏你是一個友好的圖紙,幫助你理解爲什麼會這樣(的static不是一個問題,因爲你更新變量static int d,做d++內部功能): enter image description here

當你調用裏面遞歸功能,count(2)開始,但count(3)不被破壞,它只是睡覺,等待子功能count(2)完成。當發生這種情況時,count(3)醒來並說「哦,終於!我的女兒count(2)已經結束了,所以現在輪到我了」。但請記住,在count(2)內,請撥count(1) ...

+1

漂亮的繪畫!很容易理解。 –