推 gawyfish:搞懂嘍^^~~不過考試的時候不知道有沒有這種反應 203.135.73.232 05/18
int proc2(int *a){
int b;
b=*a+1;
printf("b=%d\n",b);
while(b<=3){
b+=proc2(&b);
printf("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!!
b = 2
b = 3
b = 4
the return value of b =4
b = 7----->這裡開始搞不定>,<
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.135.73.232
> -------------------------------------------------------------------------- <
作者: deepdish (要和數學裝熟..) 看板: TransCSI
標題: Re: [問題] 程式
時間: Mon May 16 18:29:00 2005
先整理一下比較容易看,我看的結果似乎會用到遞迴= ="
----------------------------------------------------
int proc2(int *a)
{
int b;
b = *a + 1;
printf("b = %d\n", b);
while(b <= 3)
{
b += proc2(&b);
printf("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
b = 7 // 回到第一次遞迴 b = 3 + 4
result b = 7 // the return value of b = 7
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
※ 編輯: deepdish 來自: 140.115.201.17 (05/16 18:30)
※ 編輯: deepdish 來自: 140.115.201.17 (05/16 18:47)
※ 編輯: deepdish 來自: 140.115.201.17 (05/16 18:47)
※ 編輯: deepdish 來自: 140.115.201.17 (05/17 12:00)
> -------------------------------------------------------------------------- <
作者: 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
> -------------------------------------------------------------------------- <
作者: deepdish (要和數學裝熟..) 看板: TransCSI
標題: Re: [問題] 程式
時間: Tue May 17 19:53:26 2005
※ 引述《gawyfish (00)》之銘言:
※ 引述《deepdish (要和數學裝熟..)》之銘言:
: 先整理一下比較容易看,我看的結果似乎會用到遞迴= ="
: 這個遞迴程式既然這麼難看懂,我們就稍微修改一下,比較容易懂
為了方便講解起見 我們再標行號
: ----------------------------------------------------
1: int proc2(int *a)
2: {
3: int b;
4: b = *a + 1;
5: printf("b = %d\n", b);
6: while(b <= 3)---->(2)
7: {
8: b += proc2(&b);
9: printf("while b = %d\n", b);--->(1)
10: }
11: printf("result b = %d\n", b);
12: return (b); b=4的時後為什麼還會進去(1)阿 不是經過 (2)的判斷
13: }
b = 4 的時候不會進去 (1)
所以回傳值 給剛才 b = 3 的時候,
當然剛才 b = 3 早就經過 (2) 的判斷
之後就會進去 (1)
-
拜託有沒有看懂的人~請推文說你看懂了好嗎?
--
歡迎大家一起加入Intel Philanthropic Peer-to-Peer Program !!!
這項「英特爾慈善『點對點連線』計畫」旨在經由網際網路,把數百萬部個人電腦連結
起來,加速研發治療白血球過多症(血癌)的藥物,從而把新藥上市的需要時間縮短約
一半。對本計畫有興趣者,可以到http://www.grid.org/download/gold/download.htm
網站,下載該程式。
一旦一批資料處理完畢,下次電腦連接上網際網路時,不論經由寬頻或撥接,電腦便會
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.201.17
※ 編輯: deepdish 來自: 140.115.201.17 (05/17 19:55)
※ 編輯: deepdish 來自: 140.115.201.17 (05/17 23:58)