看板 Python 關於我們 聯絡資訊
def combos(n, m = 1): if n < m: return [] res = [[n]] for i in range(m, n): l = [i] for j in combos(n - i, i): res += [l + j] return res print (combos(5)) 我寫題目遇到一題 題目是這樣 假如輸入3 要列出所有相加等於3的情況 [3],[2,1],[1,1,1] 然後爬文看到一個算式比較簡單的寫法 但是還是不太懂 第七行為什麼可以讓迴圈在def執行? 還有他的每一層迭代我也不是很了解 目前只理解到 第一次執行會留下自己的值 接下來把自己的值-1 (ex:3-1=2) 繼續分解2 假如輸入是5呢 [5],[1,4],[1,1,3],[1,1,1,2],[1,1,1,1,1] 接下來的 [1,2,2],[2,3]是如何進行迭代的 我就不太清楚了 希望板上神人們可以指導一下 -- 生如夏花之絢爛, 死如秋葉之靜美。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.22.18.54 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1496823702.A.5DC.html
zerof: 遞迴 return list 06/07 16:35
s860134: 這種動態規劃的真的很燒腦XD 學過還是很難實踐 06/07 22:13
ides13: 第七行遞迴,剛學時也覺得奇怪,反正就是可以不用問為什麼 06/07 22:28
ides13: http://www.pythontutor.com/ 把code貼到這執行,看記憶體 06/07 22:29
ides13: 怎麼被使用的,就可以了解了。不過,我試了還是不怎麼懂 06/07 22:30
ides13: 要靜下心來慢慢想。另外,5改成3吧,不然步驟太多了。 06/07 22:31
ides13: 剛剛看圖時發現,function object是一開始就準備好了。 06/07 22:42
ides13: 進行for迴圈後,形成了3個combos再慢慢return。 06/07 22:51