【发布时间】:2019-02-07 07:46:36
【问题描述】:
我正在使用 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。”
算法对我来说没有意义。
【问题讨论】:
-
所以您想为 N 位长度的数据生成所有位变化?最简单的方法是将 2^N 数字转换为位,并分别读取每个位输出 True 为 1,False 为 0(反之亦然)。
-
我假设算法是这样的。您想创建一个长度为
3的列表。你会得到一个列表列表[[True], [False]]。从[True][False]的每个列表中创建两个列表。你将拥有[True, XXX][True, XXX][False, XXX][False, XXX]。现在,如描述中所述,您应该追加一次True和False。所以...[True, True][True, False][False, True][False, False]。冲洗并重复。最后,您应该有一个包含 8 个列表的列表,每个列表包含三个元素。
标签: python recursion truthtable