我正在使用Python创建一个真值表,并且这样做没有任何麻烦,但是我试图弄清楚如何为任意数量的变量递归生成True和False的所有可能值。
从以下列表开始:[[True], [False]]
我需要能够生成如下列表:
[[True, True, True],
[True, True, False],
[True, False, True],
[True, False, False],
[False, True, True],
[False, True, False],
[False, False, True],
[False, False, False]]
其中每个列表都是真值表中的一行。
基于此,您遍历并评估每一行,并根据要评估的表达式将true或false值附加到每个列表的末尾。
我已经用迭代的方式解决了这个问题,但是递归地解决这个问题对我来说没有任何意义。我一直认为递归从大到小(递减到基本情况)。喜欢在合并排序。并非如此。
我不能使用itertools之类的东西。
作业中的提示为“提示:您可以使用以下递归算法为真值表创建变量的所有组合:
该算法对我来说没有意义。
答案 0 :(得分:-1)
以下递归实现将起作用。请注意,您可以有一个更简单的基本案例:
def bool_combs(n):
if not n:
return [[]]
result = []
for comb in bool_combs(n-1):
result.append(comb + [True])
result.append(comb + [False])
return result
>>> bool_combs(1)
[[True], [False]]
>>> bool_combs(2)
[[True, True], [True, False], [False, True], [False, False]]
>>> bool_combs(3)
[[True, True, True], [True, True, False], [True, False, True], [True, False, False], [False, True, True], [False, True, False], [False, False, True], [False, False, False]]