长度为n的木条有几种分法?

78 阅读1分钟

长度为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)