[問題] 一個基本函數問題

看板C_and_CPP作者 (abc)時間11年前 (2012/08/09 20:19), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串1/1
大大好 我想請問 為什麼這CODE出來的結果是 1 2 5 10 呢 這函數不是應該在第一次執行完 印出 1 就要結束了嗎?? 不好意思 用手機發文 排版很亂... #include<stdio.h> void f(int n); int main(void) { int n=10; f(n); return 0; } void f(int n) { if(n) f(n/2); else return; printf("%d",n); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 27.240.108.141 ※ 編輯: ntnyha123 來自: 27.240.108.141 (08/09 20:25)

08/09 20:31, , 1F
f(n/2)結束會繼續接著printf啊..
08/09 20:31, 1F

08/09 20:36, , 2F
遞迴呼叫就像影分身,叫自己的分身做事之後自己該做的仍得做
08/09 20:36, 2F

08/09 20:38, , 3F
所以意思是 1 出來後, 之前執行的也會一起印出來嗎@@?
08/09 20:38, 3F

08/09 20:39, , 4F
不好意思這裡有點給他搞混亂~_~
08/09 20:39, 4F

08/09 20:49, , 5F
因為執行完f(n/2),else那部份就沒有執行,會接著printf
08/09 20:49, 5F

08/09 20:51, , 6F
f(10)->f(5)->f(2)->f(1)->f(0)->f(0)的return->
08/09 20:51, 6F

08/09 20:51, , 7F
f(1)的printf->f(2)的printf->f(5)的printf->f(10)的
08/09 20:51, 7F

08/09 20:52, , 8F
printf
08/09 20:52, 8F

08/09 21:08, , 9F
我了解了!! 謝謝各位大大!! 感謝!!
08/09 21:08, 9F
文章代碼(AID): #1G8whZex (C_and_CPP)