作者j4ce (empty)
看板Grad-ProbAsk
标题[理工] [资结] 递回程式
时间Tue Dec 15 19:01:15 2009
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
1F:推 terrykyo:CAB这步骤还是下面那个步骤 12/15 19:12
2F:→ terrykyo:第一个Box跑完会回去跑第二个Box啊 12/15 19:13
3F:→ j4ce:从CAB这步骤开始! 12/15 19:13
4F:推 terrykyo:你那边说的n应该等於0没错 可是里面有if条件式 12/15 19:16
5F:→ terrykyo:n>0才执行 n<=0不执行 12/15 19:16
6F:→ terrykyo:所以不会跑n=0的印出来 反而跳回去继续执行第二个BOX 12/15 19:17
7F:→ j4ce:我问题就是在这,n=0应该不做了!以下怎还会继续跑呢? 12/15 19:18
8F:→ j4ce:第二个box一开始n是否也为0?? 12/15 19:19
9F:推 terrykyo:再跑n=2的两个box 所以当然是等第一个box跑完 12/15 19:25
10F:→ terrykyo:再跑第二个n=2的box 12/15 19:25
11F:→ terrykyo:你的想法卡在只会执行 n=2时的执行的第一个box执行完 12/15 19:27
12F:→ terrykyo:我排列了一下 有回文给你看了 12/15 19:28
13F:→ j4ce:有,我有看到了 谢谢你!! 12/15 19:29