今天我上计算机科学课时,我的教授布置了一份有关递归的Python测验。
整个班级都卡在第二题上了,以下是问题。没有人能够接近解决方案。
def sub_set(A):
if A == []: return A
X = sub_set(A[1:])
result = []
for L in X:
result += _____
return _____
示例代码:
print(sub_set([1, 2])) # [[], [1], [2], [1, 2]]
print(sub_set([1, 2, 3])) # [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
你只能修改下划线,就像我的示例一样。
我的解决方案离完美还很遥远,甚至不应该被考虑:
def sub_set(A):
if A == []: return A
X = sub_set(A[1:])
result = []
for L in X:
result += _____
return result + [A[:1]] + [A] + [A[::2]]
#sub_set([1, 2, 3]) -> [[3], [3], [3], [2], [2, 3], [2], [1], [1, 2, 3], [1, 3]]
有人知道这个问题怎么解决吗?我们只有15分钟来解决,似乎是一个相当具有挑战性的问题。
仅供参考,他说他会放弃这个问题,因为班上没有人——大约10名经过精选的高级计算机科学课程的学生——能够解决它。
sub_set
应该返回给定列表的所有“子集”列表,而不是排列。如果是排列,那么[2,1,3]
和[3,2,1]
(以及其他一些)将会出现在sub_set([1,2,3])
的输出中,除了[1,2,3]
。 - jwodder