作者ptt0720 (湿湿)
看板Python
标题[问题] 排列组合的疑问
时间Wed Jun 7 16:21:32 2017
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://webptt.com/cn.aspx?n=bbs/Python/M.1496823702.A.5DC.html
1F:→ zerof: 递回 return list 06/07 16:35
2F:→ s860134: 这种动态规划的真的很烧脑XD 学过还是很难实践 06/07 22:13
3F:→ ides13: 第七行递回,刚学时也觉得奇怪,反正就是可以不用问为什麽 06/07 22:28
5F:→ ides13: 怎麽被使用的,就可以了解了。不过,我试了还是不怎麽懂 06/07 22:30
6F:→ ides13: 要静下心来慢慢想。另外,5改成3吧,不然步骤太多了。 06/07 22:31
7F:推 ides13: 刚刚看图时发现,function object是一开始就准备好了。 06/07 22:42
8F:→ ides13: 进行for回圈後,形成了3个combos再慢慢return。 06/07 22:51