[問題] 關於c++的程式追蹤問題

看板C_and_CPP作者 (別急著吃棉花糖)時間14年前 (2011/06/19 09:35), 編輯推噓3(305)
留言8則, 5人參與, 最新討論串1/1
# include <stdio.h> main() { foo(7); } foo(int n) { if(n==10) printf("done"); else { printf("%d",n); foo(++n); n--; printf("%d",n); } } 答案是:7 8 9 done 9 8 7 可以請問這個程式是怎麼跑的嗎? 我算的流程是 (1)一開始7代入,跑else那段,印出7 (2)再跑遞迴foo(8),印出8,...一直到foo(10) 疑問:為什麼印完done之後 後面要跟著印呢? 以上謝謝各位前輩的解說 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.87.253

06/19 09:36, , 1F
ctrl+F7 , F7
06/19 09:36, 1F

06/19 09:49, , 2F
因為你的else裡面有兩個printf,把第二個刪掉就不會繼續印了
06/19 09:49, 2F

06/19 12:03, , 3F
一開始的7 8 9下面的程式都還沒跑完 所以 n 變 10
06/19 12:03, 3F

06/19 12:05, , 4F
開始跑 下面 else 沒有跑完的程式
06/19 12:05, 4F

06/19 13:33, , 5F
程式會自己找到出口。
06/19 13:33, 5F

06/19 13:39, , 6F
請愛用IDE的step-in功能, 自己trace一遍會比較有感覺:)
06/19 13:39, 6F

03/31 10:21, , 7F
你問題應該是 foo(++n); 吧 把它n+1 就很清楚了
03/31 10:21, 7F

03/31 10:28, , 8F
foo(++n);在這邊 原本 7 8 9 經過這一行會變成10 9 8
03/31 10:28, 8F
文章代碼(AID): #1D_L9xnO (C_and_CPP)