长度为4的木条可以有以下5种分法:
1+1+1+1
1+1+2
1+3
2+2
4
import copy
# n: 木条的长度
n = 4
# ans: 最后保存的答案
ans = []
def dfs(start, que, res):
"""
:param start: 因为切割出来的木条大小是非递减的,start表示这一次取出的木条最小值界限
:param que: 保存搜索到当前位置的答案
:param res: 木条剩下没割的长度
:return: NULL
"""
if res == 0:
ans.append(copy.copy(que))
return
for i in range(start, res + 1):
que.append(i)
dfs(i, que, res - i)
que.pop(-1)
dfs(1, [], n)
print(ans)