[問題] 新手請教

看板C_and_CPP作者 (titsao)時間10年前 (2013/12/20 14:04), 編輯推噓2(2012)
留言14則, 7人參與, 最新討論串3/4 (看更多)
時間: Fri Dec 20 14:04:21 2013 各位大大,小弟剛碰C 有人可以細部的講解以下的程式碼嗎? void e(int n) { if (n<3) { e(++n); printf("%d\n", n); e(++n); } } int main() { int n = 0; e(n); system("pause"); } 此輸出結果為 3 2 1 3 實在是搞不懂,謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.4.237 ※ 編輯: titsao 來自: 112.104.4.237 (12/20 14:09)

12/20 14:08, , 1F
遞迴,逐步執行看看
12/20 14:08, 1F

12/20 14:13, , 2F
新手就跳過吧,等以後學會簡單一點的遞迴,再來碰這程式
12/20 14:13, 2F

12/20 14:19, , 3F
這個不只是遞迴的問題, 還有傳入 ++n 的問題
12/20 14:19, 3F

12/20 14:19, , 4F
這個即使逐步解釋出來新手也不一定懂, 所以就如二樓說跳過吧
12/20 14:19, 4F

12/20 15:39, , 5F
++n 有什麼問題
12/20 15:39, 5F

12/20 15:58, , 6F
是++n對於原po有學習的問題吧
12/20 15:58, 6F

12/20 21:49, , 7F
n=2的時候e(++n)造成3跳出,然後列出3,接下來e(++3)又跳出
12/20 21:49, 7F

12/20 21:50, , 8F
上一層的n=1的e(++n)之下列印出2,然後e(++2)又跳出 再回到
12/20 21:50, 8F

12/20 21:51, , 9F
n=0的那一層e(++0)的下面列出1然後進入e(++1)之後在e(++2)
12/20 21:51, 9F

12/20 21:52, , 10F
再列印出3,之後就全部不斷跳回第二個e(++n)而結束。其實
12/20 21:52, 10F

12/20 21:54, , 11F
這個問題在於每一層遞迴的n是不一樣的,出了迴圈要用舊的N
12/20 21:54, 11F

12/20 21:54, , 12F
因為每個傳進去的n都是區域變數
12/20 21:54, 12F

12/20 23:05, , 13F
請修改標題
12/20 23:05, 13F
titsao:謝謝各位熱心的指教與幫忙~~ 12/21 01:28 ※ 編輯: titsao 來自: 112.104.4.237 (12/21 01:32)

12/22 13:08, , 14F
這用紙在上面寫比較容易懂
12/22 13:08, 14F
文章代碼(AID): #1Iiztd9M (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Iiztd9M (C_and_CPP)