沒分了呃,跪求關於C語言的遞迴呼叫問題,遞迴呼叫是怎麼過程啊

2021-04-02 12:48:09 字數 1420 閱讀 2995

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語言的邏...