b98902HW 板


LINE

(設計對白) A:我知道這題要用遞迴,阿可是,不知道函式裡面要寫什麼耶... B:為什麼跑出 "回報此問題","不回報" 了 = _ = --------------------------------------------------------------- 如果你有上面的困擾,可以參考看看這個格式 這是一位B97的學長教我的,我覺得還蠻實用的,所以PO出來給大家參考 int Function( 1.參數區 ) { 2.條件判斷區 3.遞迴區 } 1.參數區: 通常會放與遞迴有關的參數,例如:座標、層數、index、必要資訊等等, 以判斷我遞迴到哪裡了,是否該停止會跟參數有很大的關係 2.條件判斷區: 這是非常重要的地方,這裡要放一些條件的判斷,判斷遞迴是否該停止,或者跳過某 些層數,或者已經跑到我要的層數,我要輸出了。 3.遞迴區: 真正自己呼叫自己的地方,通常這裡也會有一個或以上條件的判斷,以確定是否符合 題目要求,是否呼叫函式。 --------------------------------------------------------------------------- 舉例來說: The Dictionary (單班期中 雙班好像也有考) http://judgegirl.csie.org/~c2009/2009mid2/3.htm 首先把原字串照字典順序排序後 開始寫函式了 (L是題目要求輸出的長度,N是字串S長度,str是排序後字串,buf暫時存答案) char str[100]; char buf[10]; int L,N; void Findans(int layer) 參數區,這題因為只有一維,所以一個 { "層數"的參數就夠了 int i; if(layer==L){ 這裡就是條件判斷區了,當我layer跑到L, buf[layer]='0'; 就代表,我已經跑了第0,1,2..L-1層共L層 printf("%s\n",buf); 也就是任務完成,不用再遞迴,輸出唄! } else{ for(i=0;i<N;i++){ 這裡就是遞迴區,這題因為是全排列,每個都需 if(Check()==1){ 試試看,所以放了一個for loop。 buf[layer]=str[i]; 這裡Check()就是檢查有沒有符合題意,有的話 Findans(layer+1); 就進行下一層 } } } return ; } int main() { Findans(0); return 0; } 把其他該補上的程式碼補上這題就OK了 =) (#include main() Check() ) 當然,沒有一個方法是萬能的,題目變化多端,整個遞迴式還是要看題目而調整, 不過我覺得學長教了我這東西以後,我想遞迴真的有快了一點,也比較有方向, 不致於完全卡住不知道該寫什麼,所以可以參考看看。 ------------------------------------------------------------------------ 關於什麼時候該用遞迴,我會這樣想: 1.以上面的題目為例,其實如果L固定是3,我可以寫三層迴圈,檢查完,符合題意的 就輸出。 但是L是變動的,我們沒辦法告訴電腦我要跑幾層,而且萬一層數是100層, 或者是層數跟測資有關係,無法馬上確定,寫不出來。 那常常就可以想到"遞迴"。 我只要告訴電腦我哪時候該停止、哪時候進行下一層(呼叫自己)就可以了。 2.或者是像單班功課 Machine 這一題 http://groups.google.com.tw/group/ntucsie-c2009/web/homework-3?pli=1 我想要的答案是個大問題(大機器的成本),而這個大問題需要好多小問題(較小機器的 成本)來回答我,我才能回答。而小問題又需要小小問題的答案....,這種形式的題目 常常就可以想到遞迴! 我設定function回傳的值是我想要的資訊、條件判斷區判斷多小的問題是直觀解決的, 直接回傳。 (這題是"" The cost of machine A, B, and C of size 1 are x, y, and z. "" 這句話告訴了我們 size 1的cost是多少) 把參數放好、遞迴區寫好,就可以解決這一題了 = ) 當然可能還有很多@@,不過我一時也想不到,(強者可以補上)。 不過也不是什麼題目都給他遞迴下去,能夠用while解決就用while 畢竟遞迴頗浪費空間、也容易發生沒注意到的情況而無限遞迴下去。 大家加油! -- A stoo a day keeps bad grades away Just keep it ! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.241.197 ※ 編輯: barry800414 來自: 140.112.241.197 (11/17 12:19)
1F:推 zxm20243:睡醒第一推!教學好文XD 11/17 13:41
2F:→ ckclark:字典題有人還是有寫了五層迴圈AC的高手XD 11/17 14:25
3F:推 andy74139:推推!! 11/17 15:21
4F:推 lmr3796:遞迴只應天上有 11/17 16:20
5F:推 jimmyken793:凡人應當用迴圈 11/18 09:03







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP