作者deepdish (要和数学装熟..)
看板TransCSI
标题Re: [问题] 程式
时间Tue May 17 12:09:39 2005
先整理一下比较容易看,我看的结果似乎会用到递回= ="
这个递回程式既然这麽难看懂,我们就稍微修改一下,比较容易懂
----------------------------------------------------
int proc2(int *a)
{
int b;
b = *a + 1;
printf("b = %d\n", b);
while(b <= 3)
{
b += proc2(&b);
printf("
while b = %d\n", b);
}
printf("result b = %d\n", b);
return (b);
}
void main(void)
{
int n1;
printf("an easy test!!\n");
n1 = 1;
while(n1 <= 30)
{
n1 += proc2(&n1);
printf("n1 = %d\n", n1);
}
}
ans: an easy test!!// 先执行 main
b = 2 // 因为 n1 = 1 <= 30,进入 while,第一次进入 proc2
b = 3 // 第一次递回 proc2
b = 4 // 第二次递回 proc2,由於大於 3,所以不会进入 while
result b = 4 // the return value of b = 4
while b = 7 // 回到第一次递回 b = 3 + 4
result b = 7 // the return value of b = 7
while b = 9 // 回到第一次进入 b = 2 + 7
result b = 9 // the return value of b = 9
n1 = 10 // 第一次回到 main,n1 = 1 + 9,但是 <= 30,所以继续 while
b = 11 // 第二次进入 proc2,由於 > 3,所以不进入 while
result b = 11 // the return value of b = 11
n1 = 21 // 第二次回到 main,n1 = 10 + 11,还是 <=30,继续 while
b = 22 // 第三次进入 proc2,因为 > 3,所以不进入 while
result b = 22 // the return value of b = 22
n1 = 43 // 第三次回到 main,n1 = 21 + 22,已经 > 30,结束 while
--
欢迎大家一起加入Intel Philanthropic Peer-to-Peer Program !!!
这项「英特尔慈善『点对点连线』计画」旨在经由网际网路,把数百万部个人电脑连结
起来,加速研发治疗白血球过多症(血癌)的药物,从而把新药上市的需要时间缩短约
一半。对本计画有兴趣者,可以到http://www.grid.org/download/gold/download.htm
网站,下载该程式。
一旦一批资料处理完毕,下次电脑连接上网际网路时,不论经由宽频或拨接,电脑便会
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.201.17