我试图用Python编写一个递归函数,它以列表的形式返回树的分支,给定分支的深度或最大值。我真的很沮丧。也许有更简单的类或生成器实现?下面是我想要实现的函数行为的详细描述。在
func(data, depth)
'''Accepts a list with numbers > 0 and depth, i.e. max elements per list;
returns each branch of a tree'''
----------Examples--------------
Input: func([2, 1], depth=2)
Output: [[2, 2], [2, 1], [1, 2], [1, 1]]
Input: func([3, 2, 1], depth=2)
Output: [[3, 3], [3, 2], [3, 1]
[2, 3], [2, 2], [2, 1]
[1, 3], [1, 2], [1, 1]]
Input: func([2, 1], depth=3)
Output: [[2, 2, 2], [2, 2, 1], [2, 1, 2], [2, 1, 1],
[1, 2, 2], [1, 2, 1], [1, 1, 2], [1, 1, 1]]
第二个示例的图片
第三个示例的图片
这是我写的代码,它只适用于第一个示例,这太可怕了,我真的很惭愧。/我尝试了很多使用类和生成器的方法,但是我对这些不太熟悉,即使在第一个示例中,代码也只返回了一半的选项。在
^{pr2}$
我不明白你为什么要把这和穿越一棵树联系起来。你的任务基本上就是在一组数字上生成给定长度的所有置换(带替换)-这与具有固定集的笛卡尔积相同。在
在Python中,可以执行以下操作:
例如,输出第三个例子。请注意,每个输出都是一个元组,而不是一个列表—因此您可能需要转换它们。在
最简单的实现方式可能是这样的:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐