[問題] 遞回小程式

看板C_and_CPP作者 (lilyang)時間12年前 (2011/12/17 20:01), 編輯推噓0(0025)
留言25則, 7人參與, 最新討論串1/1
我是用Dev C++寫的C程式 #include <stdio.h> #include <stdlib.h> void test ( int a); int main () { test(5); system("pause"); return 0 ; } void test ( int a) { if(a!=0) { printf("! "); test(a-1); printf("* "); printf("%d ",a); } } 想了很久還是想不通if那裏如果=0那不就沒辦法執行裡面的程式了 可是居然還行,我想我因該有地方卡住了.......... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.130.4

12/17 20:11, , 1F
==
12/17 20:11, 1F

12/17 20:12, , 2F
==
12/17 20:12, 2F

12/17 20:13, , 3F
以後養成習慣寫成if(0==a) 這樣寫錯compiler會幫你抓出來
12/17 20:13, 3F

12/17 20:19, , 4F
推文是不是有點文不對題.. = =?
12/17 20:19, 4F

12/17 20:31, , 5F
http://ideone.com/3Pgju output沒輸出 你重新編譯次
12/17 20:31, 5F

12/17 20:44, , 6F
因為a==0時沒做事 所以該函式可結束 其餘的反序結束
12/17 20:44, 6F

12/17 20:47, , 7F
遞迴會重複的呼叫自己 所以停止點很重要 此函式為a==0
12/17 20:47, 7F

12/17 21:34, , 8F
一樓的@@? 原來的code沒問題呀...
12/17 21:34, 8F

12/17 23:06, , 9F
我跑你的code,結果很正常阿0.0
12/17 23:06, 9F

12/17 23:06, , 10F
! ! ! ! ! * 1 * 2 * 3 * 4 * 5 請按任意鍵繼續 . . .
12/17 23:06, 10F

12/17 23:08, , 11F
謝謝大大幫我測試,程式可以動,可是我在推遞回的時候
12/17 23:08, 11F

12/17 23:09, , 12F
想不通為什麼在if=0的時候裡面的程式碼還會繼續執行
12/17 23:09, 12F

12/17 23:15, , 13F
test(0);的時候if裡面沒有執行阿,如果有,0就被印出來了
12/17 23:15, 13F

12/17 23:18, , 14F
你可以試試step-by-step來看執行情況
12/17 23:18, 14F

12/17 23:18, , 15F
我來釐清一下 你是困惑為什麼當a是0時還可以繼續跑
12/17 23:18, 15F

12/17 23:18, , 16F
對!!!!!!!!謝謝大大問題就是這個
12/17 23:18, 16F

12/17 23:19, , 17F
還是說你改成if(a=0)時還會繼續執行?
12/17 23:19, 17F

12/17 23:25, , 18F
ㄜ...我有點不太會表達,我知道if在a=0時就不會執行下
12/17 23:25, 18F

12/17 23:25, , 19F
面的程式,可是F9一按下他的遞回我就不知道怎麼推
12/17 23:25, 19F

12/17 23:28, , 20F
你可以用中斷點一行一行看他怎執行的
12/17 23:28, 20F

12/17 23:34, , 21F
我更正一下 是當你推到a是0就不知道怎麼推下去了嗎?
12/17 23:34, 21F

12/17 23:35, , 22F
恩!
12/17 23:35, 22F

12/17 23:35, , 23F
中斷點?
12/17 23:35, 23F

12/17 23:37, , 24F
a是0結束了,但a是1的時候還沒結束,所以會繼續印
12/17 23:37, 24F

12/18 00:02, , 25F
謝謝大大~現在明白了^_^
12/18 00:02, 25F
文章代碼(AID): #1Ex8IcgS (C_and_CPP)