2017-04-17 53 views
2

靜態變量例如誰能解釋這個程序的輸出與遞歸函數

#include <stdio.h> 
    int main() 
    { 
     static int i=10; 
     if(--i) 
     { 
      main(); /*recursive call main */ 
      printf("%d ", ++i); /* print returned value of main */ 

     } 
    } 
+0

請解釋一下你有什麼問題,就是輸出你的預期是什麼?實際產出是多少?並且花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

回答

0

++i相同i = i + 1所以,當你寫

printd("%d ", ++i); 

再次增加i因此其價值保持不變。

1

static變量初始化一次。它的一生就是這個計劃。因爲變量初始化一次,所以它的初始值爲10.

在每次遞歸調用中,它將遞減(在if語句處),並且當它達到0時,它不會再發生。

上次遞歸後,它將開始打印並返回。

printf作爲語句是遞歸後,將最後的遞歸之後開始第一打印(當i=1)和將打印1至9

在執行printf並返回時,將保持由一種提高i因此,最上面的函數堆棧將得到i as 9.

1

雖然i不等於零,函數main調用自己。

if(--i) 
    { 
     main(); /*recursive call main */ 

所以,你必須調用

main(i = 10) -> main(i = 9) ->...-> main(i = 0) 

鏈當i等於零,則遞歸停止和控制的主要以前調用每個稱爲主的回報。

的主要此時之前的通話只是執行該語句

printf("%d ", ++i); /* print returned value of main */ 

因此輸出將是

1 2 3 4 5 6 7 8 9 
+0

我很確定它會打印出'1 2 3 4 5 6 7 8 9'... –

+0

https://ideone.com/vzZhOl –

+0

@AlexLop。謝謝。你是對的。 –