[理工] [資結]-遞回程式

看板Grad-ProbAsk作者 (empty)時間14年前 (2009/12/15 19:01), 編輯推噓3(3010)
留言13則, 2人參與, 最新討論串1/3 (看更多)
void xbox(int n,char x,char y,char z) { if(n>0) { printf("n=%d ,%c %c %c\n",n,x,y,z); box(n-1,x,z,y); box(n-1,y,x,z); } } 給予xbox(3,'A','B','C') OUTPUT為何? 答案是: n=3 ABC n=2 ACB n=1 ABC n=1 CAB <==想知道為何到這裡以下還會跑下去? n=2 BAC n=1 BCA n=1 ABC 我的笨拙想法是: 第三步驟時n=1時 又扣了1 再次呼叫時n不是應該=0嗎? IF判斷應該不成立了! 希望有人點醒我一下XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.42.65

12/15 19:12, , 1F
CAB這步驟還是下面那個步驟
12/15 19:12, 1F

12/15 19:13, , 2F
第一個Box跑完會回去跑第二個Box啊
12/15 19:13, 2F

12/15 19:13, , 3F
從CAB這步驟開始!
12/15 19:13, 3F

12/15 19:16, , 4F
你那邊說的n應該等於0沒錯 可是裡面有if條件式
12/15 19:16, 4F

12/15 19:16, , 5F
n>0才執行 n<=0不執行
12/15 19:16, 5F

12/15 19:17, , 6F
所以不會跑n=0的印出來 反而跳回去繼續執行第二個BOX
12/15 19:17, 6F

12/15 19:18, , 7F
我問題就是在這,n=0應該不做了!以下怎還會繼續跑呢?
12/15 19:18, 7F

12/15 19:19, , 8F
第二個box一開始n是否也為0??
12/15 19:19, 8F

12/15 19:25, , 9F
再跑n=2的兩個box 所以當然是等第一個box跑完
12/15 19:25, 9F

12/15 19:25, , 10F
再跑第二個n=2的box
12/15 19:25, 10F

12/15 19:27, , 11F
你的想法卡在只會執行 n=2時的執行的第一個box執行完
12/15 19:27, 11F

12/15 19:28, , 12F
我排列了一下 有回文給你看了
12/15 19:28, 12F

12/15 19:29, , 13F
有,我有看到了 謝謝你!!
12/15 19:29, 13F
文章代碼(AID): #1B9snzBH (Grad-ProbAsk)
文章代碼(AID): #1B9snzBH (Grad-ProbAsk)