void count(int n){
static int d=1;
printf("%d",n);
printf("%d",d);
d++;
if(n>1) count(n-1);
printf("%d",d);
}
int main(){
count(3);
}
我是編程新手,所以請幫助我理解,爲什麼在'if'語句爲false並且該函數沒有被遞歸調用之後,爲什麼輸出還包含兩個4'?解釋以下代碼的輸出?
void count(int n){
static int d=1;
printf("%d",n);
printf("%d",d);
d++;
if(n>1) count(n-1);
printf("%d",d);
}
int main(){
count(3);
}
我是編程新手,所以請幫助我理解,爲什麼在'if'語句爲false並且該函數沒有被遞歸調用之後,爲什麼輸出還包含兩個4'?解釋以下代碼的輸出?
當您進行遞歸調用,你不要過分的控制移交給功能被稱爲永遠的。如果在進行調用的函數中有一些未完成的工作,那麼一旦遞歸調用結束,它將控制回到完成未完成的工作。
在你的情況下,「未完成的業務」是最後的printf
呼叫。有三個調用count
。一旦第三次調用退出,第二次打印d
,即4
,然後退出。這反過來又使控制返回到第一個調用,該調用再次打印4
。
請將輸出添加到問題中。 – MordechayS
現在是瞭解如何使用調試器的最佳時機。使用調試器,您可以逐行瀏覽代碼,同時觀察變量及其值。如果你這樣做,你得到的結果應該有希望變得明顯。 –
@Someprogrammerdude您忘記了Eric Lippert的[如何調試小程序]的必需鏈接(https://ericlippert.com/2014/03/05/how-to-debug-small-programs/);) – George