void recurs()
分析:這裡用分層思想更便於理解,首先執行statement1語句,然後判斷是否符合test條件,如果符合,進入下一層recurs()呼叫,直到判斷不符合條件為止(到這裡為止,我們下面的statement2語句一次也沒有被執行)。然後這裡執行最底層的statement2語句,並將程式控制權返回給上一層的函式,上一層的函式繼續執行statement2語句,依次類推,知道將控制權返回到最初的函式手裡結束。
但是我們肯定會有這樣的疑問:為什麼不是一條counting down緊接著一條kaboom,而是先輸出完所有的counting down才輸出kaboom呢?
可以看到,結果竟然變成了原先的兩倍,這其實和遞迴終止語句(if(n<=2) return 1;)有關,我們可以畫出遞迴二叉樹來理清關係,
紅圈部分就是遞迴結束的標誌,每一支末尾都返回乙個值,加起來就變成了結果,所以上面變化的原因就不難理解了。這也從側面印證了遞迴終止語句不止用來判斷遞迴是否結束,還在求值過程中發揮重要作用。
遞迴中關於遞迴語句後面內容的執行
遞迴函式中,位於遞迴呼叫語句後的語句的執行順序和各個被呼叫函式的順序相反 下面看乙個經典的例子 include void up and down int int main void void up and down int n 輸出結果 level 1 n location 0240ff48 lev...
程式是怎樣執行的
程式儲存在磁碟上,程式執行在記憶體中,我們雙擊執行乙個程式的時候,作業系統通過檔案管理器找到檔案資料儲存的具體位置 通過磁碟定址技術 然後將程式載入到記憶體 每個程序對應乙個虛擬記憶體,就相當於每個程序獨自占有主記憶體,每個程序看到的記憶體位址都是一樣的,稱為虛擬位址空間 程式不會全部載入到記憶體,...
for迴圈的語句執行順序
在乙個技術qq群中,試著做了一道c的題,感覺是考察for迴圈的執行流程.原題 在c語言中,下列 的輸出結果是 選擇一項 void main j printf d,d i,j a 0,109,9 b 0,10 10,10c 10,10d 9,11 群裡居然有不少人都選了b,那個提問者還一直在問正確的結...