1樓:匿名使用者
這個問題我以前也糾結了很長時間,不過最後還是被我想通了。
如果你輸入3 即fun(3) 則最後輸出的應該先是1然後輸出3.
首先有一點你要想通,printf("%d",x)這行**無論變到哪個數字時,他都會執行一遍。
然後就是先後順序的問題。以7為例:
7/2 結果是3,3>0 然後執行
fun(x/2);
這個時候回到if(x/2>0)這裡。
3/2=1,1>0然後執行
fun(x/2);
1/2=0這時就不再執行前面的語句了,就直接執行
printf("%d",x);
這時x是=1的,所以先列印出1,這時之前3這個數字執行還沒有結束呢!
因為只有1結束之後3才能繼續向下執行,所以3開始向下執行printf("%d",x)這句;
這時輸出3,而7這個數字也還在等候3的完成,現在3完成了,所以7也就可以向下執行了,輸出7.
請注意因為7和3這兩個數字都有呼叫fun()這個函式,所以printf("%d",x);這個命令7和3都會執行一遍,這個地方是關鍵。
「接著會輸出一個x=1,為什麼輸出了這個x後還會回頭呼叫fun函式?」當他輸出1之後是沒有掉頭呼叫fun函式的,fun函式確實被呼叫了很多次,但都是在輸出1之前呼叫的。
2樓:匿名使用者
fun(3)還沒有執行完,就進到fun(1)裡面了,執行完fun(1)當然要繼續fun(3)後面的部分。
整個程式的執行過程相當於:
if(3/2>0)
printf("%d",1);
}printf("%d",3);
printf("\n");
getchar();
最外層的if是fun(3)裡面的過程,第二個if是fun(1)裡面的過程
3樓:邴寄陽
每一次呼叫就深了一層。
每一層的n是自己函式儲存的。
不同層的n的地址是不同的。值也是不同的。
pb(53)
第一層 n=53
pb(26)
第二層 n=26
pb(13)
第三層 n=13
pb(6)
第四層 n=6
pb(3)
第五層 n=3
pb(1)
第6層 n=1
pb(0)
第7層 n=0
直接返回
第6層 n=1 輸出「1」
返回第五層 n=3 輸出「1」
返回第四層 n=6 輸出「0」
返回第三層 n=13 輸出「1」
返回第二層 n=26 輸出「0」
返回第一層 n=53 輸出「1」
返回遞迴函式就是這樣執行的。
最大的危險就是如果層數太深,會把堆疊資源用光。
關於c語言請教各位高手小弟沒分如果能解答當然萬分感激
不同的 codes 表示不同的變數型別,也可以限制變數的長度.code 格式 c 字元 d 帶符號整數 i 帶符號整數 e 科學計數法,使用小寫 e e 科學計數法,使用大寫 e f 浮點數 g 使用 e或 f中較短的一個 g 使用 e或 f中較短的一個 o 八進位制 s 一串字元 u 無符號整數 ...
關於c語言的問題,關於C語言的問題。
題1 include int main 題2 include int main 題3 include int main 第1個題目 就是判斷while 括號裡面的值是否為真,因為加了個!所以 k 0 n 為真時while裡面的判斷語句就為假,因為 為邏輯與,就是判斷 兩邊的式子是否為真,當k 0為真...
關於C語言,關於C語言中 和 的用法
c語言是我現在的主用語言,因為它很強大。你不明白的地方我以前也很躊躇。原因是我們還只是c語言的初學者。平時,我們編輯完成,在視窗執行,實際上這是我們在檢測我們編輯的 是否有效。這是編譯環境提供給我們的一個視覺化視窗。當然,我們的程式裡也有體現 這主要是用來檢驗我們的邏輯。當我們能逐漸掌握了c語言的邏...