看板 C_and_CPP 關於我們 聯絡資訊
可以類比成切木頭:要切一段長度為 n 的木頭有幾種切法 ? □□□□□ ... □ 1 2 3 4 5 n 所以直觀來看,我們可以固定每次把木頭右邊切一段下來,剩下的遞迴列出來 那我們要切多長呢 ? 不知道,枚舉吧! CUT-WOOD ( dep, n ) 1 if n>1 then do 2 for i←1 to n do 3 cut[dep] ← i 3 CUT-WOOD ( dep+1, n-i ) 4 else do print cut[0 ... dep-1] 但是這樣還不夠,因為會重複列出來 要把重複的去掉很簡單,只要每次切的長度非嚴格遞減就好 CUT-WOOD ( dep, n, max_cut ) 1 if n>1 then do 2 for i←1 to max_cut do 3 cut[dep] ← i 3 CUT-WOOD ( dep+1, n-i, i ) 4 else do print cut[0 ... dep-1] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.33.57 ※ 編輯: suhorng 來自: 61.217.33.57 (10/08 23:11)
calqlus:感謝你詳細的講解~~ 10/09 00:25