递归地为变量生成所有可能的值

时间:2019-02-07 07:46:36

标签: python recursion truthtable

我正在使用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之类的东西。

作业中的提示为“提示:您可以使用以下递归算法为真值表创建变量的所有组合:

  • 基本情况:对于单个变量,所有组合的列表为[[True],[False]]
  • 递归的情况:列表中的每个元素(本身就是一个列表)都被两个列表替换,一个列表附加了True,一个附加了False。”

该算法对我来说没有意义。

1 个答案:

答案 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]]